Ric*_*ick 9 sql t-sql sql-server sql-server-2008
我正在使用SQL Server 2008,并尝试将当前数据库名称更改为变量中的一个.我通常会使用这个声明明确地这样做USE myDatabaseName.问题出现了,因为如果我正在运行脚本并且如果我不更改数据库名称,则会创建数据库中的所有表[master].
我尝试了以下但似乎没有工作,因为它继续应用其余的create tables代码[master].
DECLARE @dbName CHAR(50)
DECLARE @SqlQuery varchar(50)
SET @dbName = 'MyNewDatabaseName'
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = @dbName)
BEGIN
SELECT @SqlQuery = 'CREATE DATABASE ' + @dbName + 'COLLATE SQL_Latin1_General_CP1_CI_AS'
EXEC(@SqlQuery)
END
Select @SqlQuery = 'Use ' + @dbName
EXEC(@SqlQuery)
go
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 13
USE some_db在动态SQL中执行确实有效,但不幸的是,当范围退出数据库上下文时,会将其更改回原来的状态.
您可以使用sqlcmd此模式(在Management Studio的"查询"菜单中启用此功能).
:setvar dbname "MyNewDatabaseName"
IF DB_ID('$(dbname)') IS NULL
BEGIN
DECLARE @SqlQuery NVARCHAR(1000);
SET @SqlQuery = N'CREATE DATABASE ' + QUOTENAME('$(dbname)') + '
COLLATE SQL_Latin1_General_CP1_CI_AS'
EXEC(@SqlQuery)
END
GO
USE $(dbname)
GO
Run Code Online (Sandbox Code Playgroud)