我试图按照以下方式做点什么:
IF(@@SERVERNAME = 'SERVER1')
BEGIN
USE Appt
END
IF(@@SERVERNAME = 'SERVER2')
BEGIN
USE ApptDEMO
END
在工作中,我们的生产数据库是"Appt"
,但测试环境的数据库是"ApptDEMO."
它们是相同的,但它们的名称不同。
它在测试环境中运行正常,因为"Appt"
和"ApptDEMO"
都存在(它只是不使用"Appt"
)。
但在制作中,它告诉我" ApptDEMO"不存在。
我想创建一个脚本,我不需要为不同的环境制作x个不同的脚本。 这可能吗?
答案 0 :(得分:0)
试试这个(使用动态SQL):
DECLARE @sql nvarchar(4000)
IF (@@SERVERNAME = 'SERVER1')
BEGIN
SET @sql = N'USE Appt'
END
ELSE IF (@@SERVERNAME = 'SERVER2')
BEGIN
SET @sql = N'USE ApptDEMO'
END
IF (@sql != N'')
BEGIN
EXECUTE sp_executesql @sql
END
答案 1 :(得分:0)
数据无法动态更改(USE [DB]
),然后使查询动态化。
以下代码可能会澄清您的理解。
SELECT DB_NAME();
-- Master --Default Database
SELECT @@SERVERNAME
-- SERVER1
DECLARE @USEDB NVARCHAR(MAX) =
CASE @@SERVERNAME WHEN 'SERVER1' THEN 'USE [Appt];'
WHEN 'SERVER2' THEN 'USE [ApptDEMO];'
END -- Same as IF statement
EXEC(@USEDB) -- The database [Appt] will be changed within this batch, not outside.
SELECT DB_NAME();
-- Master --Default Database
DECLARE @MyQuery VARCHAR(MAX) = 'Select DB_NAME();'
DECLARE @UseDBWithQuery VARCHAR(MAX) = @USEDB + @MyQuery
EXEC(@UseDBWithQuery)
-- Appt