Sql-Server
使用動態sql在指定數據庫中創建視圖?
我正在編寫一個動態 sql 來在不同的數據庫中刪除和創建視圖。
所以我寫道:
set @CreateViewStatement = ' USE ['+ @DB +']; CREATE VIEW [dbo].[MyTable] AS SELECT ........something exec (@CreateViewStatement)
它給了我錯誤:
‘CREATE VIEW’ 必須是查詢批處理中的第一條語句。
如果我刪除 USE DATABASE 語句,它可以正常工作,但是不再指定數據庫……
我怎麼解決這個問題?
您可以使用嵌套
EXEC
呼叫。USE
由子批次更改的數據庫上下文。DECLARE @DB SYSNAME SET @DB = 'tempdb' DECLARE @CreateViewStatement NVARCHAR(MAX) SET @CreateViewStatement = ' USE '+ QUOTENAME(@DB) +'; EXEC('' CREATE VIEW [dbo].[MyTable] AS SELECT 1 AS [Foo] '') ' EXEC (@CreateViewStatement)
遇到這種情況時我處理的一種方法是在 use 語句之後放置 GO。
set @CreateViewStatement = ' USE ['+ @DB +']; GO CREATE VIEW [dbo].[MyTable] AS SELECT ........something' exec (@CreateViewStatement)