declare @strsql varchar(8000) SELECT @strsql='insert into aaa values('''+REPLACE('a,bc,d,abce,ddz',',',''') insert into aaa values(''')+''')'exec (@strsql) select * from aaa
icevi(按钮工厂)的思路很正确,将字符串替换为动态sql,然后执行就可以了。
create table test_t ( a varchar(8)) GO create proc proc_test ( @b varchar(200)) as begin declare @c varchar(20) declare @a int select @a=charindex (',',@b) while @a >0 begin select @c=stuff(@b,@a,len(@b)-@a+1,'') insert into test_t values (@c) select @b=stuff(@b,1,charindex (',',@b),'') select @a=charindex (',',@b) end insert into test_t values (@b) end GO PROC_TEST 'ABC,D,E,F,58438,GD' SELECT * FROM TEST_T GO
create table test_t ( a varchar(8000)) GO create proc proc_test ( @b varchar(8000)) as begin declare @c varchar(8000) declare @a int select @a=charindex (',',@b) while @a >0 begin select @c=stuff(@b,@a,len(@b)-@a+1,'') insert into test_t values (@c) select @b=stuff(@b,1,charindex (',',@b),'') select @a=charindex (',',@b) end insert into test_t values (@b) end GO PROC_TEST 'ABC,D,E,F,58438,GD' SELECT * FROM TEST_T GO
你的SQL 只是Show出來是那樣,我要的是五條記錄。不是用回車符號隔開的字串。
SELECT @strsql='insert into aaa values('''+REPLACE('a,bc,d,abce,ddz',',',''') insert into aaa values(''')+''')'exec (@strsql)
select * from aaa
GO
create proc proc_test
( @b varchar(200))
as
begin
declare @c varchar(20)
declare @a int
select @a=charindex (',',@b)
while @a >0
begin
select @c=stuff(@b,@a,len(@b)-@a+1,'')
insert into test_t values (@c)
select @b=stuff(@b,1,charindex (',',@b),'')
select @a=charindex (',',@b)
end
insert into test_t values (@b)
end
GO
PROC_TEST 'ABC,D,E,F,58438,GD'
SELECT * FROM TEST_T
GO
GO
create proc proc_test
( @b varchar(8000))
as
begin
declare @c varchar(8000)
declare @a int
select @a=charindex (',',@b)
while @a >0
begin
select @c=stuff(@b,@a,len(@b)-@a+1,'')
insert into test_t values (@c)
select @b=stuff(@b,1,charindex (',',@b),'')
select @a=charindex (',',@b)
end
insert into test_t values (@b)
end
GO
PROC_TEST 'ABC,D,E,F,58438,GD'
SELECT * FROM TEST_T
GO
供大家参考!
關鍵是要把字串分割呀,這一步才是最困難的。因為我的字串是動態的。隨時都可以變。
declare @strsql varchar(8000)
SELECT @strsql ='(select ''' + REPLACE('a,bc,d,abce,ddz',',',''') union (select ''') + ''')'
exec(@strsql)
明白你的意思了。
我目前的情況是,有一個SP含有一個參數,@strPara varchar類型的。從前端會傳這樣的類似的值過來:"a,bbb,de,zdf,sdf" , 在SP里面,我想把這個@strpara按逗號分割成單個的字串存放進一個temp table,以便用在後面查詢的JOIN條件中(目的就是不想用動態SQL)。
有什麼建議嗎?
select 'insert into aaa values('''||REPLACE('a,bc,d,abce,ddz',',','''); insert into aaa values(''')||''')' from dual;
哈