【问题标题】:'Unclosed quotation mark after the character string' error in a dynamic query动态查询中的“字符串后的未闭合引号”错误
【发布时间】:2020-03-18 04:59:16
【问题描述】:

我下面的脚本出错了:

消息 102,第 15 级,状态 1,第 6 行
'000000' 附近的语法不正确。

消息 105,第 15 级,状态 1,第 26 行
字符串'AND M.ACTIVE_FLAG=1'后的非右引号

我的代码:

DECLARE @Command NVARCHAR(MAX);

SET @Command = 'SELECT 
        S.VOUCHER, '+
        ''''+'1'+''''+ ' UPLOAD_TYPE, '+
        ''''+'UP0000001'+''''+ ' UPLOAD_ID,
        S.BRANCH BRANCH,
        --HARDCODE SEGMENT 
        CASE WHEN S.SEGMENT= ''
        THEN '+''''+'000000'+''''+'
        ELSE S.SEGMENT 
        END SEGMENT,
        M.SMART_TOC TOC,
        1 VERSION,
        S.ACCOUNT, 
        S.TYPE,
        M.SMART_ACCOUNT_ID ACCOUNT_ID,
        M.SMART_ACCOUNT_DESCRIPTIONS,
        S.YEAR YEAR,
        S.MONTH MONTH, 
        S.DEBIT *-1 DEBIT_AMOUNT,
        S.CREDIT CREDIT_AMOUNT,'+
        ''''+'DIRECT.UPLOAD'+''''+ ' UPLOADED_BY,
        GETDATE() LAST_UPDATE
    FROM #JM_DATA S,AAD_MASTER.DBO.MASTER_COA M
    WHERE 
        S.ACCOUNT = M.ACCOUNT_ID
        AND S.TYPE = M.TYPE
        AND M.IS_PARENT='+''''+'0'+''''+' AND M.ACTIVE_FLAG=1'

EXEC sp_executesql @Command; 

【问题讨论】:

  • PRINT @Command 并检查输出。在某处有一些额外的' 或缺少'
  • CASE WHEN S.SEGMENT= '' 看起来不正确
  • 您最好花时间打印输出并检查它,而不是在这里发布问题。
  • 进化 - 没有人应该通过 where 子句使用旧式连接。而且似乎没有理由在这里使用动态 sql,因为查询没有任何动态。

标签: sql sql-server


【解决方案1】:

试试这个 -

CASE WHEN S.SEGMENT= '' 不正确,应该是CASE WHEN S.SEGMENT= ''''。 识别问题的最佳方法是使用print @Command 并运行打印的查询以了解问题。

Declare @Command nvarchar(max)
 SET @Command = 'SELECT 
        S.VOUCHER, '+
        ''''+'1'+''''+ ' UPLOAD_TYPE, '+
        ''''+'UP0000001'+''''+ ' UPLOAD_ID,
        S.BRANCH BRANCH,
        --HARDCODE SEGMENT 
        CASE WHEN S.SEGMENT= ''''
        THEN '+''''+'000000'+''''+'
        ELSE S.SEGMENT 
        END SEGMENT,
        M.SMART_TOC TOC,
        1 VERSION,
        S.ACCOUNT, 
        S.TYPE,
        M.SMART_ACCOUNT_ID ACCOUNT_ID,
        M.SMART_ACCOUNT_DESCRIPTIONS,
        S.YEAR YEAR,
        S.MONTH MONTH, 
        S.DEBIT *-1 DEBIT_AMOUNT,
        S.CREDIT CREDIT_AMOUNT,'+
        ''''+'DIRECT.UPLOAD'+''''+ ' UPLOADED_BY,
        GETDATE() LAST_UPDATE
    FROM #JM_DATA S,AAD_MASTER.DBO.MASTER_COA M
    WHERE 
        S.ACCOUNT = M.ACCOUNT_ID
        AND S.TYPE = M.TYPE
        AND M.IS_PARENT='+''''+'0'+''''+' AND M.ACTIVE_FLAG=1'

EXEC sp_executesql @Command

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多