Sql server 2008 如何处理SQL Update语句中的单引号和双引号转义

Sql server 2008 如何处理SQL Update语句中的单引号和双引号转义,sql-server-2008,sql-update,Sql Server 2008,Sql Update,我有这个示例T-SQL查询,并在SQL-Server-2008上进行了尝试 DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah 我知道上面的查询将抛出错误 那么如何处理SQL Update语句中

我有这个示例T-SQL查询,并在SQL-Server-2008上进行了尝试

DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 

UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah
我知道上面的查询将抛出错误


那么如何处理SQL Update语句中的单引号和双引号转义。

您可以使用反斜杠转义引号:

"I asked my son's teacher, \"How is my son doing now?\""

在sql语句中使用两个单引号对其进行转义。双引号不应该是问题:

SELECT 'How is my son''s school helping him learn?  "Not as good as Stack Overflow would!"'
打印:

我儿子的学校如何帮助他学习?“没有堆栈溢出那么好!”

在C#和VB中,SqlCommand对象实现了Parameter.AddWithValue方法,该方法
处理这种情况

根据您使用的编程语言,您可以使用函数将双引号替换为两个双引号

例如,在PHP中:

str_replace('"', '""', $string);
如果您试图仅使用SQL来实现这一点,那么这可能就是您想要的

因此,您的查询如下所示:

"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah "
使用“替换”删除特殊字符

REPLACE(ColumnName ,' " ','')
例如:

--质疑---

--结果---


VI'RA“NJA”

当SET QUOTED_IDENTIFIER关闭时,表达式中的文字字符串可以用单引号或双引号分隔


如果文字字符串由双引号分隔,则该字符串可以包含嵌入的单引号,如撇号。

我解决了一个类似的问题,首先将文本导入excel电子表格,然后使用替换函数替换SQL所需的单引号和双引号服务器,例如替换(替换(A1,“,”,“,”,“\”)

在我的例子中,我有许多行(每行都是要清理然后插入的数据),并且在替换完成后,电子表格会自动为文本生成插入查询,例如=“插入到[dbo]。[tablename]([textcolumn])值(“&SUBSTITUTE(替换(A1),”,“”,“,”,“\”&“)”


我希望这会有所帮助。

我已经说过,在每个引号之前手动添加一个“斜杠”或一个单引号以及类似的双引号是不合适的,因为上面的示例只是一个示例,实际应用程序值超过1000个字符。谢谢Mike。但我已经说过手动添加一个“斜杠”\'或者在每个引号之前加一个引号,或者在双引号之前加一个引号都是不实际的,因为上面的示例只是一个示例,实际应用程序值超过1000个字符。如果转义字符不切实际,那么我想转义字符将非常困难。或者,您可以尝试使用det终止“”的替换值,并批量替换它们,以便执行查询。当然,当需要显示它们时,您还必须将它们重新替换为正确的值。。我确实认为某种程度上。。。关于批量更换之类的。但我觉得对于这种情况来说,这是一种过分的杀伤力,SQL必须有一些内在的优雅的处理方法,因为这个问题在10年前就已经存在了。具有讽刺意味的是,堆栈溢出让孩子们学到了好东西,但不是很好地学习:|是不是有一个特定的文本文件需要手动插入到SQL客户机中?或者您正在编写一个程序来插入文件,而您只是在客户端测试它,以了解如何编写程序?Thx Russell。。。为了试图了解情况。这个场景就像--有各种系统向我们发送1000多个字符的字符串。现在,此字符串作为sql参数传递,我的sql update查询需要将此字符串插入到特定列中。在它是1000多个字符的字符串时,在它成为sql参数之前,执行替换。使用任何合适的工具,命令行grep、C#等,只要在1000+字符字符串变成SQL之前使用任何可用的查找替换功能即可。这似乎不是SQL问题。这更像是一个系统集成问题。
DECLARE @STRING AS VARCHAR(100)
SET @STRING ='VI''RA""NJA "'

SELECT @STRING 
SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME