我有跨多个环境(DEV,SIT,UAT等)部署的脚本,每个环境中都有不同的数据库名称,即foobar1,foobar2等。
有没有办法在USE [database]
中对db名称进行参数化,以避免每个环境有1个脚本?以下代码在@dbname
DECLARE @dbname NVARCHAR(10)
SET @dbname = (SELECT NAME
FROM sys.databases
WHERE NAME LIKE 'foobar%')
USE @dbname
GO
答案 0 :(得分:0)
就像评论中提到的那样,你有几个选择。
使用SQLCMD模式。在SQL Management Studio中,您可以在菜单[查询] - >中找到这个(当您打开查询时)。 [SQLCMD模式]。 然后在您的脚本中,您可以使用:
:SETVAR DatabaseName “AdventureWorks2012″
USE $(DatabaseName);
使用占位符。例如。您使用##DATABASENAME##
,然后找到/替换为正确的名称。
USE [##DATABASENAME##];
不要使用USE
语句,并在要执行脚本时选择正确的数据库。
使用动态SQL(这里有点过分)。您的查询将成为一个巨大的字符串,您可以在其中使用变量。
declare @databasename nvarchar(100) = 'YourDatabaseName';
declare @sqlStringToExecute nvarchar(max);
set @sqlStringToExecute = 'Use ' + @databasename + '; -- do rest of the query'
EXECUTE sp_executesql @sqlStringToExecute