web-dev-qa-db-ja.com

動的SQLを使用して、指定したデータベースにビューを作成しますか?

別のデータベースにビューをドロップして作成する動的SQLを作成しています。

だから私は書いた:

set @CreateViewStatement = 
                '
                USE ['+ @DB +'];
                CREATE VIEW [dbo].[MyTable]
                AS

                SELECT ........something
exec (@CreateViewStatement)

それは私にエラーを与えます:

「CREATE VIEW」はクエリバッチの最初のステートメントである必要があります。

USE DATABASEステートメントを削除すると正常に動作しますが、データベースは指定されていません...

この問題を解決するにはどうすればよいですか?

16
King Chan

ネストされた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)
25
Martin Smith