TSQL Select甚至在不执行

时间:2018-02-16 22:22:39

标签: sql-server tsql

最终编辑; 通过更新

来实现它
IF @@servername = 'Production'

IF ServerProperty('ServerName')  = 'Production'

感谢shawnt00踩过这个!

我有一个特殊的问题,在测试中,数据库名称后缀为test但在实时它们不存在。

因此,在测试将代码发布到生产时,我必须编写一个if语句,指出是否正在测试,使用测试数据库,否则使用生产数据库。如下所示。

然而,问题似乎即使我在测试中,生产数据库的select语句仍会运行并由于测试时数据库不存在而引发错误,只有DatabaseTest会这样做。

On Test @@ servername将为'Test'。在prod,它将是'生产'。

DECLARE @serverName VARCHAR(50)= @@servername;
DECLARE @WhoModified VARCHAR(30)= 'Me';
DECLARE @DateModified DATETIME= GETDATE();
DECLARE @StatusNameCancel VARCHAR(30)= 'Cancelled';
DECLARE @StatusCodeCancel INT= 0;


IF @@servername = 'Production'
BEGIN;
    SELECT @StatusCodeCancel = Value
    FROM DatabaseA.dbo.TableA
    WHERE ParameterName = @StatusNameCancel;

    UPDATE [DatabaseA].[dbo].[TableB]
      SET
          StatusCode = @StatusCodeCancel,
          WhoModified = @WhoModified,
          WhenModified = @DateModified
    WHERE ID IN(1, 2);
END;

IF @@servername = 'Test'
BEGIN

    SELECT @StatusCodeCancel = ParameterValue
    FROM DatabaseATest.dbo.TableA
    WHERE ParameterName = @StatusNameCancel;

    UPDATE [DatabaseATest].[dbo].[TableB]
      SET
          StatusCode = @StatusCodeCancel,
          WhoModified = @WhoModified,
          WhenModified = @DateModified
     WHERE ID IN(1, 2);
END;

这有什么解决方法吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

我会仔细检查服务器名称。确保这些值看起来都正确:

SELECT
    ServerProperty('machinename') as [machinename], 
    ServerProperty('ServerName') as [ServerName],
    @@ServerName as [@@ServerName];

https://docs.microsoft.com/en-us/sql/t-sql/functions/servername-transact-sql