(Azure Synapse) 如何在 SQL 脚本中获取环境名称?

(Azure Synapse) How to get the environment name in SQL Script?

在 Synapse Analytics 中,我们有四种环境:

"****devsa"

"****qasa"

"****uatsa"

"****prodsa"

这是我创建外部数据源的脚本:

IF NOT EXISTS (SELECT * FROM sys.external_data_sources WHERE name = 'Datalake')
BEGIN
CREATE EXTERNAL DATA SOURCE [DataLake]
WITH (LOCATION = 'https://****devsa.blob.core.windows.net/');
END;

如何改变位置名称?

我的目标是能够在任何环境中运行这个脚本。

Azure Synapse 不支持 @@servername 函数,但您可以使用 SERVERPROPERTY 获得类似的结果。一个简单的例子,在专用和无服务器 SQL 池上测试:

SELECT SERVERPROPERTY( 'ServerName' )

您可以将结果分配给一个变量,使用 Like 和通配符 (%) 检查其内容。一个简单的例子:

DECLARE @serverName VARCHAR(100) = CAST( SERVERPROPERTY( 'ServerName' ) AS VARCHAR(100) )
DECLARE @environment VARCHAR(10)

SELECT @serverName sn

IF @serverName Like '%dev'
    SET @environment = 'dev'
ELSE IF @serverName Like '%qasa'
    SET @environment = 'QA'
ELSE
    RAISERROR( 'Unable to determine environment for server %s.', 16, 1, @serverName )

SELECT @serverName sn, @environment e;

NB 在匹配字符串末尾没有通配符 (%) 等同于 'ends with'。仔细检查您的服务器名称是否可以超过 100 并进行相应调整。