create table a
(
ID varchar(10) primary key,
[value1] varchar(10),
[value2] varchar(10),
[value3] varchar(10),
[value4] varchar(10),
[value5] varchar(10)
)insert into a (ID,[value1],[value2],[value3],[value4],[value5]) values('1','52','61','47','51','43')
insert into a (ID,[value1],[value2],[value3],[value4],[value5]) values('2','52','61','47','51','43')
insert into a (ID,[value1],[value2],[value3],[value4],[value5]) values('3','53','64','42','55','48')
insert into a (ID,[value1],[value2],[value3],[value4],[value5]) values('4','56','66','46','57','42')
insert into a (ID,[value1],[value2],[value3],[value4],[value5]) values('5','50','64','41','58','43')
类似这样的一个表,里面有5行数据,每行有5个value
在存储过程中定义了25个参数,
v1_1,v2_1,v3_1,v4_1,v5_1
v1_2,v2_2,v3_2,v4_2,v5_2
v1_3,v2_3,v3_3,v4_3,v5_3
v1_4,v2_4,v3_4,v4_4,v5_4
v1_5,v2_5,v3_5,v4_5,v5_5
(前缀v1表示每行记录的value1,后缀_1,_2……表示该行记录的ID)
每个参数对应着表里自己的value
不要set @v1_1=select value1 from a where ID=1
set @v2_1=select value2 from a where ID=1
有什么方法能快速或者简单,不用写那么多代码的给这堆参数赋对应的值
没分了大侠帮忙!!

解决方案 »

  1.   

    首先你的这种写法是错误的
    set @v1_1=select value1 from a where ID=1
    set @v2_1=select value2 from a where ID=1
    应该这样写 select @v1_1=value1,@v2_1=value2 from a where id=1其次有必要获取所有值赋给参数吗。如果要全部获取
    直接 select * from a where 你的条件
    输出结果集就可以了。
      

  2.   

    看你这意思,是要把这个表里所有的数据都作为存储过程的参数吧,如果是MSSQL2008及以上版本,那就直接使用表类型作为参数好了。
    表类型: 
    创建一个表类型,以后在定义表变量的时候,就可以直接使用该表类型。
    创建表类型:
    create type dbo.OrderTotalsByYear as table
    (
    orderyear int not null primary key,
    qty int not null
    )
    定义一个表变量直接使用表类型:
    declare @MyOrderTotalsByYear as dbo.OrderTotalsByYear
    insert into @MyOrderTotalsByYear (orderyear,qty)
    select YEAR(a.orderdate) as orderyear,SUM(b.qty) as qty from sales.Orders a inner join sales.OrderDetails b on a.orderid=b.orderid group by YEAR(a.orderdate)
    select * from @MyOrderTotalsByYear
    以后直接使用这个表类型变量即可。
      

  3.   

    直接从别的地方复制过来的代码ALTER Procedure [dbo].[InsertFTAX]
    @SetupDate datetime,
    @tDate char(7),
    @ComTaxNo varchar(20),
    @ShortName Varchar(50),
    @Creator varchar(30),
    @SysTaxNo int Output  
    As
    Declare @MaxSysTaxNo int  Select @MaxSysTaxNo=max(SysTaxNo) From FTAX
    Set @MaxSysTaxNo=IsNull(@MaxSysTaxNo, 0 )
    Set @SysTaxNo=@MaxSysTaxNo+1Insert Into FTAX ( SysTaxNo, SetupDate, tDate, ComTaxNo, ShortName, Creator ) Values (
    @SysTaxNo, @SetupDate, @tDate, @ComTaxNo, @ShortName, @Creator )
    上面的存储过程调用:exec dbo.InsertFTAX '2012-05-13','2012-05-14','111111','aaaaaaaa','bb',123具体到你的那个,只用定义5个变量,逐条拿出表记录放进存储过程就差不多了吧