Sql-Server

使用動態sql在指定數據庫中創建視圖?

  • February 18, 2013

我正在編寫一個動態 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)

引用自:https://dba.stackexchange.com/questions/12127