【发布时间】:2018-07-10 11:06:19
【问题描述】:
我想执行一个动态查询来获取受影响的行数。但 SQL Result 窗格在执行后返回结果。如何避免返回列。我尝试了以下方式。
DECLARE @Command NVARCHAR(MAX)= 'SELECT * FROM Product WHERE ID = 12'
DECLARE @Count AS INT
EXEC sp_executesql @Command, N'@C INT OUTPUT', @C=@Count OUTPUT
IF (@Count > 0)
BEGIN
EXECUTE (@Command)
END
ELSE
BEGIN
DECLARE @CatalogProduct VARCHAR(MAX) = 'SELECT p.ManufactureCode,p.PartNo,p.Size,p.ID AS ProductID,p.Name ,p.ParentProductID,p.BasePrice FROM Product.Product p WHERE p.ThruDate > GETDATE() '+@Where
EXECUTE (@CatalogProduct)
END
END
我想避免从上面附加的图像中返回空列集。
【问题讨论】:
-
我没有看到变量
@where的实际定义位置。 -
如果您想要计数,请使用
COUNT(*)。 不要使用字符串连接来创建查询,这会使您面临 SQL 注入攻击、转换问题和错误。 SQL 已经是动态的 - 你可以简单地运行任何你想要的查询。 -
你是在问如何丢弃SSMS中的结果?在这种情况下查询-->查询选项-->结果-->网格-->执行后丢弃结果。
-
为什么要问这个问题?您要解决的实际问题是什么?解决那个可能要容易得多。例如,分页代码通常将
select count(*) from (originalquery)包裹在查询周围,以获取要显示的总行数。使用 LINQ,在任何查询上调用.Count(*)以执行它并获取结果数量而不实际返回结果是微不足道的 -
顺便说一句,如果您只想在有任何 ID 为 12 的产品时执行查询,您可以将其指定为查询本身的条件。要么明确返回 ID 为 12 的产品,要么返回
EXISTS (select 1 from Product where ID=12)
标签: sql sql-server execute dynamicquery