Exec SQL错误,因为内部有单引号

Exec SQL错误,因为内部有单引号,sql,Sql,我有以下exec查询: EXEC ( 'SELECT (SELECT Count(*) AS Count_Id FROM ns_customer WHERE external_id IN ( ' RW00363075 ',' RW00336566 ',' RW00365438 ',' RW00343570 ') ) AS Count_Id, ACH_allowed, CC_allowed, DD_allowed FROM ns_customer

我有以下exec查询:

EXEC (
        'SELECT (SELECT Count(*) AS Count_Id FROM ns_customer WHERE external_id IN (
        ' RW00363075 ',' RW00336566 ',' RW00365438 ',' RW00343570 ')  ) AS Count_Id, 
        ACH_allowed, CC_allowed, DD_allowed FROM ns_customer 
        WHERE external_id IN (' RW00363075 ',' RW00336566 ',' RW00365438 ',
        ' RW00343570 ')'
        );
执行后,我得到一个错误:

SQL语句:“RW00363075”附近的语法不正确。;原因: “RW00363075”附近的语法不正确

我怎样才能解决这个问题


谢谢

用两个单引号转义单引号

EXEC('SELECT (SELECT Count(*) AS Count_Id FROM ns_customer WHERE external_id IN (''RW00363075'',''RW00336566'',''RW00365438'',''RW00343570'')  ) AS Count_Id, ACH_allowed, CC_allowed, DD_allowed FROM ns_customer 
    WHERE external_id IN (''RW00363075'',''RW00336566'',''RW00365438'',''RW00343570'')');

具体问题的答案是将单引号加倍。但是,(假设您使用的是SQL Server),您的查询将更简单地写为:

SELECT COUNT(*) OVER () as Count_Id, ACH_allowed, CC_allowed, DD_allowed
FROM ns_customer 
WHERE external_id IN ('RW00363075', 'RW00336566', 'RW00365438', 'RW00343570')
或者,我更愿意使用
sp_executesql

declare @sql nvarchar(max);
set @sql = '
SELECT COUNT(*) OVER () as Count_Id, ACH_allowed, CC_allowed, DD_allowed
FROM ns_customer 
WHERE external_id IN (''RW00363075'', ''RW00336566'', ''RW00365438'', ''RW00343570'')';

exec sp_executesql @sql;

如果你想学习如何做到这一点,你最好学习正确的方法
sp_executesql
优于
exec()
,因为它允许您在查询中传入和传出参数。首先学习使用它比以后学习要简单。

使用双单引号?当你把字符串放在一起时,它们之间需要有加号(+),如下面所示选择“选择”+“测试”用你正在使用的数据库标记你的问题。这似乎是基于代码和错误消息的SQL Server。为什么要执行此操作,因为没有变量标识符?可能他可以使用
REPLACE
来转义单引号(如果使用SQL Servee),@Gordon Linoff。因此,他可以将此构造与包含单引号的其他SQL命令一起使用。