我希望将sql数据批量复制到其他数据库。但问题在于,当我尝试执行此插入语句时。
它给我一个像
这样的错误 Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string ''.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ''.
我找到了N' '
创建问题的解决方案。但是当我替换它时,它只是应对N'
。那么如何才能取代整个查询。有太多行,所以我不能手动到N''
。
尝试复制时只需复制此部分
INSERT [dbo].[HaveWantMaster]
([HaveWantMasterID],
[Type],
[Description],
[TotalAvailable],
[Status],
[Deleted],
[CreatedBy],
[CreatedOn],
[UpdatedBy],
[UpdatedOn])
VALUES (409,
0,
N'tap',
3,
N'
答案 0 :(得分:1)
一个简单的例子如下:
PRINT 'THIS IS AMAZING
Msg 105,15级,1号国家,1号线后的未公开引号 字符串'这令人惊叹'。
Msg 102,Level 15,State 1,Line 1'这是令人惊讶'附近的语法不正确。
相反,请正确关闭字符:PRINT 'THIS IS AMAZING'
ASCII字符的分隔符('
)或CHAR(39)
是SQL Server中表示字符串的特殊字符。当解析器读取此字符时,它会假定前一个字符,直到下一个类型(')的分隔符是同一个字符串的一部分。
PRINT ASCII(CHAR(39) + ' ' + CHAR(39))
PRINT ASCII(' ')
[Delimiter]:39 [Space]:32
解析器读取第一个语句与CHAR(39)+''+ CHAR(39)相同(因为''和''代表每个单引号),所以优化器足够聪明,可以识别重复的分隔符并返回特殊字符。
但是,在您的代码中,您未能向我们提供实际代码,因此我们无法验证您的代码是否包含您的环境未显示的特殊字符。您可以复制粘贴原始text / sql文件中的“space”,并检查CL
/ RF
个字符等特殊字符。
SELECT ASCII('
')
13
注意CHAR(13)经常被误认为是CHAR(10),前者开始等同于键盘上的回车键,即使在查询中它们在这个例子中看起来有效:
PRINT 'HOW ABOUT THIS' + CHAR(10) + 'BROWN COW' + CHAR(13) + 'HOLY MOLY'
--returns
HOW ABOUT THIS
BROWN COW
HOLY MOLY
<强>结论强>:
例如
EXEC(' PRINT''MyPeople')
将通过解析器,但这实际上是读取
PRINT'MyPeople
N'
语法失败。 (N
)只是告诉解析器它处理NVARCHAR
个字符。您必须将所有分隔符括在SQL Server中。答案 1 :(得分:0)
现在来点。Ascii 0 (zero) written to char(1) field
。
由于null-terminated (ASCII 0)
,它开始出错。根据{{3}}
问题是,SQL Server中的字符串不是以C ++中的字符串为空终止(ASCII 0) - 因此当您从C ++将单字符字符串写入SQL Server时,您只获得第一个字符(实际上有两个;字符和终结符) - 终结符实际上是被截断的。当您尝试编写“空白”字符串(实际上只包含终结符)时,不会发生任何拼合。所以你自己就得到了终结者。