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)

参考技术A 字符串要打引号的,数值型才不用打,最直接的方法是把你这些字符串换成具体的内容自己拼接一下检查,向你上面的string strsql="select * from jpsx_ddl where class= 城市"; 而城市是个字符串,所以要加单引号string strsql="select * from jpsx_ddl where class=' " + cls + " ' ";
以上回答你满意么?追问

谢谢回答!但是我的问题中已经有单引号了,就是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,这是个输入参数,如果把这个变量直接用字符串代替,就能通过.但是我的存储过程需要使用这个变量.

参考技术C insert和select好像没发拼接,他们用的函数就不一样

以上是关于SQLSERVER 字符串拼接问题的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver的varchar类型拼接的问题

sqlserver如何把取出的数据拼接起来

sqlserver中怎么将一列数据拼接成一个字符串

sqlserver 字符串拼接及拆开联表查询的问题

sqlserver中怎么将一列数据拼接成一个字符串,并以换行符分开

sql查询中字符串拼接的问题