【问题标题】:SQL Joining Strings for a path referencing external file引用外部文件的路径的 SQL 连接字符串
【发布时间】:2025-12-18 09:40:01
【问题描述】:

我正在尝试将一些字符串连接在一起以定义路径 - 例如,给定 $(name) = "PATH",我想要 :r .\PathOne\PATH.sql。由于Syntax Error,查询在第一个:r 处失败。如果我对路径进行硬编码,并将$(name) 留在条件中,它会按预期工作。只是路径的字符串构造由于某种原因而失败。

 IF '$(name)' LIKE 'TEST%'
 BEGIN
   :r .\PathOne\'$(name)'.sql
 END
 IF '$(name)' NOT LIKE 'TEST%'
 BEGIN
   :r .\PathTwo\'$(name)'.sql
 END

如何在 SQL 中为路径连接字符串?直接命名文件即可。

【问题讨论】:

  • 您确定将查询窗口设置为 SQLCMD 模式吗?你在哪里定义了 name 变量?
  • 请提供想要的结果和你得到的结果
  • @AaronBertrand 是的 - 这是在其他地方定义和工作的,只是不在字符串构造中。
  • @FLICKER - 已更新。
  • @AaronBertrand - 如果我对路径进行硬编码,此流程将按我的意愿工作。我所需要的只是帮助用字符串构建路径——即使IF '$(name)' 也能按我的意愿工作。我就是无法让字符串路径正常工作。

标签: sql-server sql-server-2012 sqlcmd


【解决方案1】:

将路径的硬编码部分括在双引号中,并且您的变量在硬编码部分旁边没有任何空格,用于构造路径,例如

:setvar filename "test"
:setvar root "D:\temp"
:r  $(root)"\test\"$(filename)".sql"

会产生类似的路径

D:\temp\test\test.sql

要解决您的问题,请尝试以下方法

:r ".\PathOne\"$(name)".sql"

希望对你有帮助

【讨论】:

    【解决方案2】:

    我知道这听起来可能不直观,但请尝试将路径放在双引号中,如下所示。这适用于我的机器。没有双引号,我会遇到和你一样的失败。

    :setvar name "test"
    
    if '$(name)' like 'test%'
    begin
        :r "c:\temp\test1\"$(name).sql
    end
    else if '$(name)' not like 'test%'
    begin
        :r "c:\temp\test2\"$(name).sql
    end
    

    【讨论】: