sql将值插入到特定列中
我试图将sql将值插入到特定列中,sql,sql-server,insert,sql-server-2008-r2,Sql,Sql Server,Insert,Sql Server 2008 R2,我试图将nvarchar值插入表中的特定列中。该值可能具有保留字和单引号字符(如在“不”中) 我得到的是: set @myString= REPLACE(@myString, '''', ''''''); set @ExecStatement = 'INSERT INTO #TempTable('+@ColumnName+') VALUES('''+@myString+''')'; exec (@ExecStatement) 这适用于绝大多数项目,但我收到以下错误消息: 味精105,第15级,
nvarchar
值插入表中的特定列中。该值可能具有保留字和单引号字符(如在“不”中)
我得到的是:
set @myString= REPLACE(@myString, '''', '''''');
set @ExecStatement = 'INSERT INTO #TempTable('+@ColumnName+') VALUES('''+@myString+''')';
exec (@ExecStatement)
这适用于绝大多数项目,但我收到以下错误消息:
味精105,第15级,状态1,第1行字符串“我们不明白,请重新发送或键入HE”后未关闭的引号。
味精102,第15级,状态1,第1行
“我们不明白,请重新发送或键入HE”附近的语法不正确 我实际上错过了应该在那里的文本的剩余部分。应该是
“我们不明白,请重新发送,或者键入帮助,有人会与您联系”
任何帮助都将不胜感激。使用方括号可能有助于:
set @myString= REPLACE(@myString, '''', '''''');
set @ExecStatement = 'INSERT INTO #TempTable(['+@ColumnName+']) VALUES('''+@myString+''')';
exec (@ExecStatement)
根据您的输出字符串为的注释:
INSERT INTO #TempTable(Col1) VALUES('We didn''t understand, please resend, or type HELP and someone will contact you.')
您需要转义字符串周围的引号,并将实际应为引号的引号增加四倍。。。差不多
INSERT INTO #TempTable(Col1) VALUES(''We didn''''t understand, please resend, or type HELP and someone will contact you.'')
您应该从输入中转义单引号。因为您正确地转义了字符串,所以它应该可以工作。表上是否有使用动态SQL的触发器?能否在
exec(@ExecStatement)
之前执行SELECT@ExecStatement
,并向我们显示结果是什么?也许问题在于字符串的长度。你能展示一下declare
语句吗。@Tom这里是选择结果:INSERT-INTO#tentable(Col1)值('我们不理解,请重新发送,或者键入帮助,有人会联系你。')
列名不是我遇到的问题,是@myString
给了我问题。@shadonar。不知何故,你可能知道这一点。然而,我们没有。如果您对问题进行编辑,在变量替换后包含@ExecStatement
的值,这将非常有用。或者至少是@ColumnName
的值。可以尝试值(“N”的意思是设置@myString=REPLACE(@myString,'','');
实际上是设置@myString=REPLACE(@myString,'','')
?保持@myString
上的REPLACE
不变,但是在@ExecStatement
上做同样的事情,所以在@ExecStatement
上做REPLACE
做了一些有趣的事情,所以我只做了设置@myString=REPLACE(@myString,“,”,“,”)
,解决了这个问题。