我对输出有一个愚蠢的问题。 我有一个存储过程,里面正在做一个动态SQL来检查表中是否有记录,这是一个例子:
SET @sqlLog =
'SELECT 1 FROM MyTable
WHERE TableName = ''' + @TableName + '''' + '
AND TheKey = ''' + convert(varchar(50), @LoadGuid) + ''''
EXEC(@sqlLog)
之后我使用@@ RowCount来验证结果是否为0。
问题是在WHILE内部,并且每行在SQL Management Studio的输出窗口中显示结果,我真的不想要这个。 任何的想法?谢谢!
答案 0 :(得分:0)
如果您只需要知道查询产生的行数,请尝试将选择列表更改为'SELECT COUNT(*) FROM MyTable ... '
。这将为您提供单一结果的计数。
答案 1 :(得分:0)
declare @count int
exec sp_executeSql
N'set @count = (select count(*) from MyTable where TableName = ''' + @tableName + '''
and TheKey = ''' + convert(varchar(50), @LoadGuid) + '''',
N'@count int output',
@count = @count output
if @count > 0
print 'rows exist'
else
print 'no rows'
答案 2 :(得分:0)
我认为你需要使用NOCOUNT选项:
SET NOCOUNT ON
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms189837.aspx。
祝你好运, 戴夫切尔卡斯基答案 3 :(得分:0)
为什么你甚至需要动态SQL?你可以做类似以下的事情:
IF EXISTS ( SELECT 1 FROM MyTable
WHERE TableName = @TableName
AND TheKey = convert(varchar(50), @LoadGuid))
BEGIN
-- Your logic here
END
答案 4 :(得分:0)
没有办法让它压制直接选择语句的结果。你实际上告诉它将这些结果返回给调用应用程序,这里是SSMS,它正在这样做。 SSMS正确显示这些结果。您可以选择如何显示它们(结果窗格或文本等),但我不知道SSMS中的选项可以将其关闭。
你可以做的是使用sp_executesql和输出参数,这样你只需要将rowcount放在参数中,而不是请求任何结果。这看起来像是:
declare @theCount int
SET @sqlLog = 'SELECT @theCount = count(*)
FROM MyTable
WHERE TableName = ''' + @TableName + '''' +
' AND TheKey = ''' + convert(varchar(50), @LoadGuid) + ''''
EXEC sp_executesql @sqlLog, N'@theCount int OUTPUT', @theCount=@theCount OUTPUT
然后检查@theCount的值是否为0而不是@@ Rowcount。