通常我们给表变量添加数据都是这样的.
DECLARE @Tbl TABLE(
id INT,
name VARCHAR(30))INSERT INTO @Tbl(id ,name)
VALUES(1,'张三')但是目前这个添加的数据时通过其他方式查询出来的而且查询用到IN
使用传统的方式就不行了例如这样
INSERT INTO @Tbl(id ,name)
SELECT id,name FROM userTab WHERE id IN(@id)
由于这里@id是传进来的一连串拼接好的字符串所以这样直接查查不出来了
@id拼接好后的字符串形式为@id='1','2','3,'后来尝试使用EXEC sp_executesql
但是报变量未声明的错误.
请教各位这里拼接sql查询出来的语句如何把数据写入表变量就算不写表变量这种带IN的查询,里面的变量是不是必须事先拼接好?有别的方法么.
DECLARE @Tbl TABLE(
id INT,
name VARCHAR(30))INSERT INTO @Tbl(id ,name)
VALUES(1,'张三')但是目前这个添加的数据时通过其他方式查询出来的而且查询用到IN
使用传统的方式就不行了例如这样
INSERT INTO @Tbl(id ,name)
SELECT id,name FROM userTab WHERE id IN(@id)
由于这里@id是传进来的一连串拼接好的字符串所以这样直接查查不出来了
@id拼接好后的字符串形式为@id='1','2','3,'后来尝试使用EXEC sp_executesql
但是报变量未声明的错误.
请教各位这里拼接sql查询出来的语句如何把数据写入表变量就算不写表变量这种带IN的查询,里面的变量是不是必须事先拼接好?有别的方法么.
union all
SELECT id,name FROM userTab WHERE id =2
union all
SELECT id,name FROM userTab WHERE id =3
SELECT id,name FROM userTab WHERE charindex(','+ltrim(id)+',',','+@id+',')>0
INSERT INTO @Tbl(id ,name)
SELECT id,name FROM userTab WHERE ltrim(id) IN('+@id+')')
create table userTab(id int identity(1,1),name nvarchar(50))
insert userTab
select '张三'
insert userTab
select '李四'
insert userTab
select '王五'
DECLARE @Tbl TABLE(
id INT,
name VARCHAR(30))
declare @id varchar(20)
set @id='1,2,3'
insert @Tbl
exec ('SELECT id,name FROM userTab WHERE id IN('+@id+')')
select * from @Tbl
(3 行受影响)
id name
----------- ------------------------------
1 张三
2 李四
3 王五(3 行受影响)