2012-09-10 77 views
0

我在編寫一個tsql過程來將一個數據庫中的所有視圖重新創建到不同的dtabase上。我收到錯誤「+ +語法錯誤」當我查看代碼時,雖然語法對我來說是正確的。任何人都可以告訴我這個查詢有什麼問題嗎?TSQL語法錯誤

USE [SOURCEDB] 
BEGIN 
DECLARE @SQL NVARCHAR(MAX) 
DECLARE CUR_V CURSOR FOR 
SELECT sc.text  
FROM sys.views av   
JOIN sys.syscomments sc ON sc.id = av.object_id 
OPEN CUR_V 
FETCH NEXT FROM CUR_V INTO @SQL 
WHILE @@FETCH_STATUS = 0 
BEGIN  
EXEC sp_executesql N'USE [DESTINATIONDB] EXEC sp_executesql ' + @SQL + ''  
FETCH NEXT FROM CUR_V INTO @SQL END CLOSE CUR_V DEALLOCATE CUR_V END 

在此先感謝

+2

儘量寫全在一個單獨的var中加入句子:'set @sql = N'....'然後用它作爲'sp_executesql'參數。 – danihp

+0

我試過最初danihp,但由於它的視圖它不工作,因爲視圖的聲明必須是批處理中的第一條語句。這是嵌套executionql語句的原因。 – Lumpy

+1

聲明一個新的var @total_sql並在這個新的var中設置所有命令:set @total_sql = N'Use ...'+ @sql +'''然後執行'EXEC sp_executesql @ total_sql'。嘗試這個。 – danihp

回答

1

你不能做+在同一行sp_executesql

declare @sql nvarchar(1000) 
select @sql = N'USE [DESTINATIONDB] EXEC sp_executesql ' + @SQL + '' 
exec sp_executesql @sql 

或者可能你的意思是

select @sql = N'USE [DESTINATIONDB] EXEC sp_executesql N''' + @SQL + '''' 
+0

謝謝podiluska。我試過這個建議,但是SQL Server仍然說這個+是不正確的語法。 – Lumpy

+0

表中的值是否也包含+? – podiluska

+0

我不這麼認爲。 CREATE VIEWS的值來自系統表(sys.views和sys.syscomments),因此這些內容都是可能的。大部分視圖都非常簡單(例如SELECT * FROM Table WHERE dtdeleted IS NULL) – Lumpy