动态SQL的SQL输出

时间:2012-10-01 16:07:09

标签: sql sql-server

我对输出有一个愚蠢的问题。 我有一个存储过程,里面正在做一个动态SQL来检查表中是否有记录,这是一个例子:

SET @sqlLog = 
    'SELECT 1 FROM MyTable 
      WHERE TableName = ''' + @TableName + '''' + '
        AND TheKey = ''' + convert(varchar(50), @LoadGuid) + ''''                                    
EXEC(@sqlLog)

之后我使用@@ RowCount来验证结果是否为0。

问题是在WHILE内部,并且每行在SQL Management Studio的输出窗口中显示结果,我真的不想要这个。 任何的想法?谢谢!

5 个答案:

答案 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。