SQLSERVER 字符串拼接问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLSERVER 字符串拼接问题相关的知识,希望对你有一定的参考价值。
declare @excel12file nvarchar(600)
declare @excel12conntmp nvarchar(1999)
SET @excel12file='D:\统计表.xlsx'
SET @excel12conntmp='INSERT INTO OPENROWSET('+char(39)+'MICROSOFT.ACE.OLEDB.12.0'+char(39)+','+char(39)+'Excel 12.0;HDR=YES;DATABASE='
SET @excel12conntmp=@excel12conntmp+@excel12file
SET @excel12conntmp=@excel12conntmp+';'+char(39)+','+char(39)+'SELECT * FROM [b1$]'+char(39)+') SELECT * FROM #b1'
print @excel12conntmp
测试环境:sqlserver2008r2(32位),win7(64位),
为什么结果是
INSERT INTO OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;DATABASE=D:\统计表.xlsx
缺少了最后一个字符串内容?
经过N多试验,终于解决问题。原来是字符串后面有空格,占用了变量定义的空间,致使最后的字符串“挤”不进去了。解决办法是对各字符串变量用RTRIM去空格。类似这样处理:
SET @excel12conntmp=RTRIM(@excel12conntmp)+RTRIM(@excel12file)
以上回答你满意么?追问
谢谢回答!但是我的问题中已经有单引号了,就是char(39)
参考技术B SET @excel12conntmp=@excel12conntmp+';'+char(39)+','+char(39)+'SELECT * FROM [b1$]'+char(39)+') SELECT * FROM #b1'改为
SET @excel12conntmp=@excel12conntmp+';'+''','''+'SELECT * FROM [b1$]'''+') SELECT * FROM #b1'追问
谢谢回答!这样的写法简洁了许多,但是仍然不能把后面的字符串拼接上去.
问题出在拼接变量@excel12file,这是个输入参数,如果把这个变量直接用字符串代替,就能通过.但是我的存储过程需要使用这个变量.
以上是关于SQLSERVER 字符串拼接问题的主要内容,如果未能解决你的问题,请参考以下文章