最终编辑; 通过更新
来实现它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;
这有什么解决方法吗?
答案 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