如何限制 SSIS 包中目标数据库实例的版本?

Eri*_*ris 5 sql-server ssis sql-server-2012 ssis-2012

如何限制 SSIS 包仅在 SQL Server 2012 上执行?

是否有内置的方法来执行此操作(元数据?),还是我需要进行查询?

(可能属于一个新问题)

我可以使用 获取版本SERVERPROPERTY('ProductVersion'),但如何验证它是like '11.%'

Dav*_*ave 7

Execute SQL Task在控制流中创建一个首字母并在其中使用以下代码:

IF ((SELECT CAST(SERVERPROPERTY('ProductVersion') as CHAR(2))) = 11)
    BEGIN
        SELECT 'TRUE' As Result
    END
    ELSE
        SELECT 'FALSE' As Result
Run Code Online (Sandbox Code Playgroud)

您当然可以用它做几件事,对于 SSIS 开发人员来说,最简单和最清晰的方法之一就是将结果存储在 SSIS 变量中,并将 SQL 任务之后的先例约束分配给Expression and Constraint.

如果Execute SQL Task成功并返回 TRUE,它将允许执行的其余部分,这可能是单个包、较大执行流的一部分或主包。如果它失败或返回 FALSE,您的包将停止……尽管如此,可能值得为警报消息或日志放入另一条路径。

您也可以使用(SELECT @@VERSION) LIKE 'Microsoft SQL Server 2014%'. 我喜欢这个,因为它是一个更熟悉的版本命名法。

  • 我赞成一般方法,但我认为使用@@server 会带来更痛苦的体验。处理太多的文本和排列。我认为通过检索 OP 最初想到的“SELECT SERVERPROPERTY('productversion') AS ProductVersion”的值,然后通过优先约束应用您的逻辑,它们会得到更好的服务 (2认同)