插入"高尔夫"在SQL Server中失败,错误未闭合的引号

时间:2014-03-11 13:34:55

标签: sql sql-server insert quotation-marks

非常简单的table和insert语句,如果字符串是'Golf'则失败,但适用于任何其他字符串。 表创建:

CREATE TABLE [dbo].[market]
(
    [marketID] [int] NOT NULL,
    [name] [varchar](50) NULL,
CONSTRAINT [PK_market] PRIMARY KEY CLUSTERED ([marketID] ASC)
)

插入:

INSERT [dbo].[market] ([marketID], [name]) VALUES (4, N'Golf')

Error: Unclosed quotation mark after the character string ''. (State:37000, Native Code: 69)
Error: Incorrect syntax near ''. (State:37000, Native Code: 66)
Error: Unclosed quotation mark after the character string ')'.

现在,如果我将插入更改为:

INSERT [dbo].[market] ([marketID], [name]) VALUES (4, N'Test')

它运作得很好。有没有人见过这个?

1 个答案:

答案 0 :(得分:3)

我认为如果在字符串中的任何位置找到GO,则必须断开正在使用的应用程序并将其拆分为批次。

e.g。它使用了一种天真的方法,如下所示。

Regex.Split(sqlString, "GO", RegexOptions.IgnoreCase);

然后将结果作为单独的批次执行。

运行

INSERT [dbo].[market] ([marketID], [name]) VALUES (4, N'

返回您报告的前两个错误。

  

Msg 105,15级,1号国家,1号线后的未公开引号   字符串''。

     

消息102,级别15,状态1,行1不正确   语法附近''。

执行

lf')

返回第三个。

  

Msg 105,15级,1号国家,1号线后的未公开引号   字符串')'。

临时解决方法可能是尝试

INSERT [dbo].[market] ([marketID], [name]) VALUES (4, N'G' + 'olf')

但当然应用程序确实需要修复。