【问题标题】:Tag SQL Server instance as DEV, TEST, STAGING, PRODUCTION etc将 SQL Server 实例标记为 DEV、TEST、STAGING、PRODUCTION 等
【发布时间】:2015-07-16 22:51:33
【问题描述】:

我们有一些 SQL Server 机器和实例正在运行,我们希望我们的代码能够识别它是在 SQL Server 的开发、测试还是生产服务器实例上运行。基于此,我们想编码走一条特定的路径。

我们几乎没有像

这样硬编码 SQL Server 名称和实例的选择
  1. Case when @@SERVERNAME= ABC/XYZ then DEV 等等。

  2. 检查 Name 或 INSTANCE WHEN (CHARINDEX('DEV', @@SERVERNAME, 1) > 0 ) then DEV 等中的特定字母。

  3. 从表格中选择类型:

    select @vcServerType = vcServerType 
    from master.dbo.tbl_ServerDetails
    when @vcServerType = 'DEV' and so on.
    

但都依赖于假设会找到 DEV 或服务器名称将包含某些字母,从而在数据库中创建一个将存在于所有实例中的表..

如果只存在一个在实例级别设置/识别的属性,应该会容易得多..任何建议(除了上面)

在 SQL Server 中有没有一种方法,我们可以在其中设置一些属性或将它们标记为 DEV、TEST 或 Production?

【问题讨论】:

  • 我并不总是确定让代码知道环境是开发环境还是生产环境是个好主意。如果您的代码在这些环境中运行方式不同,您如何确保您的测试准确无误?
  • 您忘记了您也可以只使用注册表来存储您的环境(即,AppIsRunning 键值 = 1(开发)、2(测试)、3(生产)。这样可以轻松调试根据部署位置(开发、测试或生产)进行分支的代码。
  • @DavidG 这与代码无关,而是每个环境的配置,例如连接字符串。此外,我们还有一些场景,我们希望只在某些环境上执行少量脚本。
  • @StarPilot 你是对的,但机器级描述符没有帮助,因为我们在同一个盒子上也有多个实例。
  • @NarinderSharma 然后使用应用程序级别的配置设置或创建一个表来存储设置。让代码包含设置是不安全的:如果您需要更改参数的值,您必须在代码中寻找它并可能发布新版本。更改设置???哦,恕我直言,这不是一个好主意。

标签: sql-server


【解决方案1】:

在其属性中的数据库级别上有一个名为“扩展属性”的选项卡。

You can set them with sys.sp_addextendedproperty

例如在 ADO.NET 中阅读它们,就像对 question Shows 的回答一样。

编辑:我并没有真正看到您询问实例级别或服务器级别的标签。很抱歉没有直接解决这个问题。但是您应该能够通过 DB-Level 上的属性实现您想要的,不是吗?

【讨论】:

    【解决方案2】:

    按照上面的建议,是的,扩展属性是极好的解决方案。

        use master
        go
    
        EXEC sp_addextendedproperty
             @name = 'Environment'
          , @value = 'Development'
    
        SELECT [value] AS [EnvironmentType]
        FROM [sys].[extended_properties] AS [ep]
        WHERE [ep].[class_desc] = 'DATABASE'
          AND [ep].[name] = 'Environment';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2012-05-28
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多