我试图将一些文本数据插入到SQL Server 9中的表中。

文本中包含了一个引用。

我怎么逃脱呢?

我尝试使用两个单引号,但它给我带来了一些错误。

如。插入my_table值('hi, my name' s tim.');


当前回答

这应该是可行的:使用反斜杠和双引号

"UPDATE my_table SET row =\"hi, my name's tim.\";

其他回答

双倍的引用本应有效,但奇怪的是它没有对你起作用;但是,另一种方法是在字符串周围使用双引号字符,而不是单引号字符。也就是说,

插入my_table值("hi, my name's tim.");

通过将单引号加倍来转义,就像您在示例中展示的那样。下面的SQL说明了这个功能。我在SQL Server 2008上进行了测试:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

结果

value
==================
hi, my name's tim.

我也遇到了同样的问题,但我的问题不是基于SQL代码本身中的静态数据,而是基于数据中的值。

这段代码列出了我的数据库中所有的列名和数据类型:

SELECT DISTINCT QUOTENAME(COLUMN_NAME),DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS

但是有些列名实际上在列名中嵌入了单引号!,例如……

[MyTable].[LEOS'DATACOLUMN]

为了处理这些,我必须使用REPLACE函数以及建议的QUOTED_IDENTIFIER设置。否则,在动态SQL中使用该列时会出现语法错误。

SET QUOTED_IDENTIFIER OFF;
    SET @sql = 'SELECT DISTINCT ''' + @TableName + ''',''' + REPLACE(@ColumnName,"'","''") + ...etc
SET QUOTED_IDENTIFIER ON;

双引号选项帮助我

SET QUOTED_IDENTIFIER OFF;
insert into my_table values("hi, my name's tim.");
SET QUOTED_IDENTIFIER ON;

下面的语法将只转义一个引号:

SELECT ''''

结果将是一个单引号。对于创建动态SQL:)可能非常有帮助。