create procedure p_fzkczlz 
@t_con varchar(100), 
@t_bname sysname 
as 
declare @stsql  varchar(2),@tz int 
set @tz=1 
set @stsql=substring(@t_con,1,2) 
declare @tb table (id nvarchar(10)) 
while len(@stsql)>0 
begin 
insert into @tb select @stsql 
set @tz=@tz+2 
set @stsql=substring(@t_con,@tz,2) 
end 
SELECT 仓库, 商品编号,  商品类别, 商品名称, 单据编号, 摘要,  收入数量, 收入单价, 
收入金额, 发出数量, 发出单价, 发出金额, 商品售价, 操作日期,  操作时间 FROM 
dbo.v_cangkumx where 商品类别 in (select id from @tb) 
go问题: 我想把SELECT 查询后的结果放在 @t_bname 动态变量表名的表里.(因为想实现存储在不同机器查询后结果)
我修改存储过程后出现新的错误.
新的过程:
CREATE procedure p_FZ_spzl
@t_con varchar(100),
@tb_name sysname
as 
declare @stsql  varchar(2),@tz int
set @tz=1
set @stsql=substring(@t_con,1,2)
declare @tb table (id nvarchar(10)) 
declare @sql varchar(8000)
while len(@stsql)>0
begin 
insert into @tb select @stsql
set @tz=@tz+2
set @stsql=substring(@t_con,@tz,2)
end
set @sql = 'SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  最小库存, 最大库存, 兑换标准, 是否需安装' + @tb_name +   ' FROM dbo.v_spzl where 类别编号 in (select id from'+ @tb +')'
exec(@sql)
----SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  
----最小库存, 最大库存, 兑换标准, 是否需安装    FROM dbo.v_spzl where 类别编号 in (select id from @tb)
GO
错误提示是:" 必须生明&tb变量 " 可我在定义时已经声明了呀,请问这是为什么

解决方案 »

  1.   

    你的@t_con是怎样的字符串 举例看看
      

  2.   

    我的@t_con  是这样的01020312 双数出现 01 是一组 03 是三组 每一个都是2个字符
      

  3.   

    试下 看打印出来的sql是什么样的 如果不行自己在修改下create procedure p_fzkczlz 
    @t_con varchar(100), 
    @t_bname sysname 
    as 
    declare @stsql  varchar(2),@tz int,@sql nvarchar(800) 
    set @tz=1 
    set @stsql=''''+substring(@t_con,1,2)+ ''''
    select @sql = 'declare @tb table (id nvarchar(10)) ' 
    while len(@stsql)>0 
    begin 
    set @sql= @sql + ' insert into @tb select ' + @stsql 
    set @tz=@tz+2 
    set @stsql=''''+substring(@t_con,@tz,2) + ''''
    end 
    print (@sql)
    set @sql= @sql +' SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  最小库存, 最大库存, 兑换标准, 是否需安装 ' 
                   + @t_bname +  ' FROM dbo.v_spzl where 类别编号 in (select id from @tb )' 
    print (@sql)
    exec (@sql) 
    go 
      

  4.   

    DECLARE @RC int
    DECLARE @t_con varchar(100)
    DECLARE @t_bname nvarchar(128)
    SELECT @t_con = '0102'
    SELECT @t_bname = N't_ss'
    EXEC @RC = [ls200906].[dbo].[p_fzkczlzt] @t_con, @t_bname
    DECLARE @PrnLine nvarchar(4000)
    PRINT '存储过程: ls200906.dbo.p_fzkczlzt'
    SELECT @PrnLine = ' 返回代码 = ' + CONVERT(nvarchar, @RC)
    PRINT @PrnLine没有结果 ,到现在还在提示"正在执行批量查询"
      

  5.   


    create procedure p_fzkczlz 
    @t_con nvarchar(100), 
    @t_bname nvarchar(100)  
    as 
    declare @stsql  nvarchar(2000),@tz int,@sql nvarchar(4000) 
    set @tz=1 
    select @stsql= ''''+substring(@t_con,1,2) + ''''select @sql = 'declare @tb table (id nvarchar(10)) ' 
    while @tz<len(@t_con)
    begin 
    set @sql= @sql + ' insert into @tb select ' + @stsql 
    set @tz=@tz+2 
    set @stsql=''''+substring(@t_con,@tz,2) + ''''
    print @stsql
    end 
    print (@sql)
    set @sql= @sql +' SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  最小库存, 最大库存, 兑换标准, 是否需安装 ' 
                   + @t_bname +  ' FROM dbo.v_spzl where 类别编号 in (select id from @tb )' 
    print (@sql)
    exec (@sql) 
    go  
      

  6.   

     
    --这次应该对了
    create procedure p_fzkczlz 
    @t_con nvarchar(100), 
    @t_bname nvarchar(100)  
    as 
    declare @stsql  nvarchar(2000),@tz int,@sql nvarchar(4000) 
    set @tz=1 
    select @stsql= ''''+substring(@t_con,1,2) + ''''select @sql = 'declare @tb table (id nvarchar(10)) ' 
    while @tz<len(@t_con)
    begin 
        set @sql= @sql + ' insert into @tb select ' + @stsql 
        set @tz=@tz+2 
        set @stsql=''''+substring(@t_con,@tz,2) + ''''end 
    set @sql= @sql +' SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  最小库存, 最大库存, 兑换标准, 是否需安装 into ' 
                   + @t_bname +  ' FROM dbo.v_spzl where 类别编号 in (select id from @tb )' 
    print (@sql)
    exec (@sql) 
    go 
    --输出的sql
    declare @tb table (id nvarchar(10))  
    insert into @tb select '01' 
    insert into @tb select '02' 
    SELECT 类别编号, 商品编号, 商品名称, 助记码, 单位, 进价, 零售价, 是否促销, 供应商,  最小库存, 最大库存, 兑换标准, 是否需安装 
    into t_ss 
    FROM dbo.v_spzl 
    where 类别编号 in (select id from @tb ) 
     
      

  7.   

    有结果了 可是没形成表  是不是 少了个into  呀