SQL Server 中 “ ” 的 ' ' 内部

' ' inside of " " in SQL Server

提问人:Mad Scientist 提问时间:7/31/2018 最后编辑:marc_sMad Scientist 更新时间:7/31/2018 访问量:1094

问:

在此 SQL 查询中

INSERT INTO RESULT_FILTER (RESULT_FILTER_NAME, RESULT_FILTER_SQL)
VALUES ('German Power Trades flagged red', 
        '" AND worst_status = 'R' AND country = 'DE' AND commodity = 'EL'"');

存在一个问题,即 SQL Server 无法处理"AND worst_status='R' AND country='DE' AND commodity='EL'"'

发生以下错误:

消息 102,级别 15,状态 1,第 3 行 “R”附近的语法
不正确。

我是否必须在引号内使用另一种语法才能让 SQL Server 将其视为引号?我正在使用 Microsoft SQL Server Management Studio 2017

SQL Server SSMS 行情

评论

3赞 Diado 7/31/2018
如何转义 SQL Server 中的单引号?
0赞 juergen d 7/31/2018
你如何插入它?在代码中?如果是这样,请使用预准备语句。
0赞 juergen d 7/31/2018
@Hearner:这是 SQL Server,而不是 MySQL

答:

3赞 Yogesh Sharma 7/31/2018 #1

您需要将单引号加倍:

INSERT INTO RESULT_FILTER (RESULT_FILTER_NAME, RESULT_FILTER_SQL)
        VALUES('German Power Trades flagged red', '" AND worst_status=''R''
                 AND country=''DE'' AND commodity=''EL'' "');

评论

3赞 Damien_The_Unbeliever 7/31/2018
“双引号”是该字符的一个相当常见的名称。相反,我会说“你需要将单引号加倍”,这就是你在代码中所做的。"
0赞 Yogesh Sharma 7/31/2018
@Damien_The_Unbeliever。。。著名的。
1赞 Cetin Basoz 7/31/2018 #2

在现实世界中,您不太可能按字面意思编写这些值。如果你真的这样做了,那么你需要将单引号加倍。但是,对于实际场景,您将使用也处理此问题的参数:

declare @filterName nvarchar(200) = N'German Power Trades flagged red'
declare @filterSQL nvarchar(4000) = N'AND worst_status=''R''
      AND country=''DE'' 
      AND commodity=''EL''' 
-- @filterName and @filterSQL would come from client
INSERT INTO RESULT_FILTER (RESULT_FILTER_NAME, RESULT_FILTER_SQL)
VALUES (@filterName, @filterSQL);