使用动态sql在指定的数据库中创建视图?

Kin*_*han 16 sql-server-2005 sql-server dynamic-sql

我正在编写一个动态 sql 以在不同的数据库中删除和创建视图。

所以我写道:

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

                SELECT ........something
exec (@CreateViewStatement)
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

'CREATE VIEW' 必须是查询批处理中的第一条语句。

如果我删除 USE DATABASE 语句,它可以正常工作,但是不再指定数据库....

我怎么解决这个问题?

Mar*_*ith 25

您可以使用嵌套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)
Run Code Online (Sandbox Code Playgroud)