我如何使用"使用[数据库]" SQL中IF语句中的事务?

时间:2016-10-14 14:48:20

标签: sql-server tsql if-statement

我试图按照以下方式做点什么:

IF(@@SERVERNAME = 'SERVER1')
BEGIN
  USE Appt
END
IF(@@SERVERNAME = 'SERVER2')
BEGIN
  USE ApptDEMO
END

在工作中,我们的生产数据库是"Appt",但测试环境的数据库是"ApptDEMO." 它们是相同的,但它们的名称不同。

它在测试环境中运行正常,因为"Appt""ApptDEMO"都存在(它只是不使用"Appt")。 但在制作中,它告诉我" ApptDEMO"不存在。

我想创建一个脚本,我不需要为不同的环境制作x个不同的脚本。 这可能吗?

2 个答案:

答案 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