2012-10-01 80 views
0

我有一個關於輸出的愚蠢問題。 我有一個內部做一個動態SQL,如果有表中的記錄檢查的存儲過程,這是例子:來自動態SQL的SQL輸出

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

我使用@@行數來驗證,如果結果是在這之後0或不。

問題是,在WHILE中,並且每行都顯示SQL Management Studio的輸出窗口中的結果,而我並不真正需要它。 有什麼想法?謝謝!

回答

0

爲什麼你甚至需要爲這個動態SQL?你可以這樣做以下:

IF EXISTS (SELECT 1 FROM MyTable 
      WHERE TableName = @TableName 
      AND TheKey = convert(varchar(50), @LoadGuid)) 
BEGIN 
    -- Your logic here 
END 
+0

這是真的!我之前說過這是一個愚蠢的問題!謝謝! – rgx71

+0

@ rgx71 - 根本不是一個愚蠢的問題。如果此答案(或其他答案)正確地解決了您的問題,請考慮將其標記爲已接受。 – Lamak

+0

再次抱歉,我該怎麼做才能將其標記爲已接受? – rgx71

0

如果您只需要知道查詢產生的行數,請嘗試將選擇列表更改爲'SELECT COUNT(*) FROM MyTable ... '。這會給你計數作爲一個單一的結果。

+0

我的問題是,我不希望在執行存儲過程期間的輸出顯示計數結果(*) – rgx71

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' 
0

有沒有辦法把它壓抑像這樣的直選語句的結果。你直接告訴它將這些結果返回給調用應用程序,這裏是SSMS,它正在這樣做。 SSMS正在正確顯示這些結果。關於如何顯示它們(結果窗格或文本等),您可以選擇一些選項,但我不知道SSMS中有關於將其關閉的選項。

你可以做的是使用帶輸出參數的sp_executesql,這樣就可以不用請求任何結果,而只需要將行數放入參數中。這看起來像這樣:

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', @[email protected] OUTPUT 

然後你檢查@theCount的值是否爲0而不是@@ Rowcount。