2014-02-25 67 views
0

我有一個執行存儲過程的遊標。我已經在遊標中引入了一個新的變量dbname,並且在dbname附近出現異常錯誤。引入了此更改,以便在不同的數據庫上執行storedProc_getOutputsByRuncan存儲過程。執行存儲過程的遊標中的多個值

exec(' 
DECLARE @dbName nvarchar(100) 
DECLARE @runID INT 
DECLARE @getRunDetails CURSOR 
DECLARE @delayLoad bigint 
SET @delayLoad = 1 
SET @getRunDetails = CURSOR FOR 
SELECT DBName, RunID from ' + @temp_table_runID + ' 
OPEN @getRunDetails 
FETCH NEXT 
FROM @getRunDetails INTO @dbName, @runID 
WHILE @@FETCH_STATUS = 0 
BEGIN 
-- I have tried at this point printing @runid and @dbname and it prints fine.Error in line below 
INSERT INTO ' + @temp_table_outputs + ' Execute ''@dbname''.dbo.storedProc_getOutputsByRun   
@runID, @delayLoad 
FETCH NEXT 
FROM @getRunDetails INTO @dbName, @runID 
END 
CLOSE @getRunDetails 
DEALLOCATE @getRunDetails') 
+0

你使用[標籤:SQL服務器]或另一個dbms? – 2014-02-25 16:46:20

+0

對不起,我應該明確這一點。我正在使用SQL Server。 – Abe

回答

0

如果你是包裝這一切在其自己的變量,並打印出來,這條線

'INSERT INTO ' + @temp_table_outputs + ' Execute ''@dbname''.dbo.storedProc_getOutputsByRun' 

會產生這樣的:

INSERT INTO myTable Execute '@dbname'.dbo.storedProc_getOutputsByRun 

問題在於你沒有正確地轉義字符串來將@dbname替換爲實際值。

修復方法是在主字符串中嵌套另一個字符串,然後執行該操作。

像這樣的東西里面的主串:

declare @sql nvarchar(max) 
set @sql = ''INSERT INTO ' + @temp_table_outputs + ' Execute ''[email protected]+''.dbo.storedProc_getOutputsByRun ''+cast(@runID as varchar)+'', ''+cast(@delayLoad as varchar)+'''' 
print @sql 
exec(@sql) 

這將產生一個類似的最終產品...

exec(' 
DECLARE @dbName nvarchar(100) 
DECLARE @runID INT 
DECLARE @getRunDetails CURSOR 
DECLARE @delayLoad bigint 
SET @delayLoad = 1 
SET @getRunDetails = CURSOR FOR 
SELECT DBName, RunID from ' + @temp_table_runID + ' 
OPEN @getRunDetails 
FETCH NEXT 
FROM @getRunDetails INTO @dbName, @runID 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    declare @sql nvarchar(max) 
    set @sql = ''INSERT INTO ' + @temp_table_outputs + ' Execute ''[email protected]+''.dbo.storedProc_getOutputsByRun ''+cast(@runID as varchar)+'', ''+cast(@delayLoad as varchar)+'''' 
    print @sql 
    --exec(@sql) 


    FETCH NEXT 
    FROM @getRunDetails INTO @dbName, @runID 
END 
CLOSE @getRunDetails 
DEALLOCATE @getRunDetails') 

您可能需要調整這一點,但是這是現在很簡單,只需在新代碼中完成EXEC(@SQL)的註釋,然後將其打印出來即可。將消息複製到新的SSMS窗口,並檢查語法。

相關問題