请教SQL语句什么意思

有下面这样一段SQL代码,意思是把str长字符串以逗号隔开截成多个字符串,但是 select @strsql='insert into temp values ('''+replace(@str,',',''') insert into temp values (''')+''')'这句语句看不明白是什么意思?为什么要这样写?
create table temp(a varchar(20)) declare @strsql as varchar(8000) declare @str as varchar(3000) set @str='1234,234,test,4325,343455' select @strsql='' select @strsql='insert into temp values ('''+replace(@str,',',''') insert into temp values (''')+''')'exec (@strsql)

实际上语句需要的结果就是这么几句。
insert into temp values ('1234')
insert into temp values ('234')
insert into temp values ('test')
insert into temp values ('4325')
insert into temp values ('343455')
但这5个值都在 @str='1234,234,test,4325,343455' 里面,那怎么实现这个结果呢?
你所列出的语句里面,它使用了这么一种方法——将@str里面的' , ' 分隔符号(中文里的逗号)替换成 insert into temp values 这么一句话,并且将替换完的结果放在@strsql中,那么就@strsql就变成了这样 @strsql='1234 insert into temp values 234 insert into temp values test insert into temp values 4325 insert into temp values 343455' ,那么现在再执行@strsql的话不就得到想要的结果了吗?
当然中间还有一些细节方面的问题
把 ' , '替换为 insert into temp values 这么一个语句用的是replace函数
replace (@str,',',' insert into temp values ') 这句的意思就是将@str中的分隔符' , '替换成insert into temp values语句。那么现在@str变为 '1234 insert into temp values 234 insert into......'
但这样仍然还不能执行,因为可以发现还有几个问题,1234前面缺少一句 insert into temp values,values后面 缺少括弧和引号。所以在前面还需要加上一句insert into temp, 而且values 后面需要加上括弧 。我们先加上括弧试试,那么语句就变成下面这样
@strsql=replace(@str,',',''') insert into temp values (''')
print @strsql --加个输出看看结果是什么样。
上面的一句的意思就是:将@str中的分隔符' , '替换为 ') insert into temp values (' 注意这里,
不仅加了括弧,而且加上了引号。
现在得到的结果是
1234') insert into temp values ('234') insert into temp values ('test') insert into temp values ('4325') insert into temp values ('343455
现在就简单了,只需要在前面加上一句insert into temp (' 最后加上一个 ')就成功了。
那么语句就是你所说的这句了
select @strsql='insert into temp values ('''+replace(@str,',',''') insert into temp values (''')+''')'
整个语句完整的可以是这样
create table temp(a varchar(20))
declare @strsql as varchar(8000)
declare @str as varchar(3000)
set @str='1234,234,test,4325,343455'
set @strsql='insert into temp values ('''+replace(@str,',',''') insert into temp values (''')+''')'
exec (@strsql)
select @strsql=''这句可以不用
select @strsql= 也可以写成set @strsql= 在这里是一样的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-19
exec(需要一个字符串) 有些sql语句如
declare @tableName varchar(100)
set @tableName ='employee'
select * from @tableName //遇到这种情况时只能这么写:
exec('select * from '+@tableName) //表名是变量时 采用这个 不然错误
第2个回答  2014-01-20
应该是变量,@strsql=代表给变量赋值,@strsql代表直接使用变量值,类似编程里的get,set
第3个回答  2014-01-20
@strsql='' select @strsql='insert into temp values ('''+replace(@str,',',''') insert into temp values (''')+''')'
定义变量 @strsql

exec (@strsql)
执行
相似回答