通常我们给表变量添加数据都是这样的.
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的查询,里面的变量是不是必须事先拼接好?有别的方法么.

解决方案 »

  1.   

    既然你能拼成'1','2','3,'我想 你肯定也能拼成SELECT id,name FROM userTab WHERE id =1
    union all
    SELECT id,name FROM userTab WHERE id =2
    union all
    SELECT id,name FROM userTab WHERE id =3
      

  2.   

    INSERT INTO @Tbl(id ,name)
    SELECT id,name FROM userTab WHERE charindex(','+ltrim(id)+',',','+@id+',')>0
      

  3.   

    exec ('
    INSERT INTO @Tbl(id ,name)
    SELECT id,name FROM userTab WHERE ltrim(id) IN('+@id+')')
      

  4.   


    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 行受影响)