|
本帖最后由 记忆 于 2013-4-23 21:08 编辑
我写了一个存储过程NRSPay- /*设备充值存储过程*/
- if exists (select * from sysobjects where name='NRSPay')
- drop procedure NRSPay
- GO
- Create procedure NRSPay
- @BH varchar(50), ---设备编号
- @balance float ---充值费用
- AS
- declare
- @MX nvarchar(50), ---未交费起始月份
- @YX nvarchar(50), ---未交费的年份
- @NX varchar(20), ----未交费起始于月标准费用
- @sql nvarchar(1000),
- @sql1 nvarchar(1000),
- @ParmDefinition nvarchar(max);
- BEGIN
- select top 1 @MX =
- (case
- when TariffList_PayStatus_1 = 0 then 1
- when TariffList_PayStatus_2 = 0 then 2
- when TariffList_PayStatus_3 = 0 then 3
- when TariffList_PayStatus_4 = 0 then 4
- when TariffList_PayStatus_5 = 0 then 5
- when TariffList_PayStatus_6 = 0 then 6
- when TariffList_PayStatus_7 = 0 then 7
- when TariffList_PayStatus_8 = 0 then 8
- when TariffList_PayStatus_9 = 0 then 9
- when TariffList_PayStatus_10 = 0 then 10
- when TariffList_PayStatus_11 = 0 then 11
- when TariffList_PayStatus_12 = 0 then 12
- else
- 0
- end),@YX=TariffList_Year
- from LifeCycle.dbo.PM_TariffList where NRS_NO = @BH
- order by TariffList_Year
- print(@MX)--打印查到的月份
- print(@YX)--打印查到的年份
- set @sql1=N'select @NX1 =TariffList_Norm_'+@MX+' from LifeCycle.dbo.PM_TariffList where TariffList_Year=@YX1';
- print(@sql1)
- set @ParmDefinition=N'@YX1 int,@NX1 varchar(20) output';
- print(@ParmDefinition)
- exec sp_executesql @sql1,@ParmDefinition,@YX1=@YX,@NX1=@NX output;
- print(@NX)
- END
复制代码 调用:
EXEC NRSPay @BH='C234008',@balance='100'
测试结果有问题
结果如下:
2
2001
select @NX1 =TariffList_Norm_2 from LifeCycle.dbo.PM_TariffList where TariffList_Year=@YX1
@YX1 int,@NX1 varchar(20) output
问题在于 :print(@NX)没有显示结果,我不知道问题在哪,sp_executesql 第一次使用,不知道是不在sp_executesql 写错了,请大大们指教???
我主要的目的就是想将查出来的TariffList_Norm_ @MX字段值赋给@NX(里面有两个变量是不是只能使用sp_executesql啊)
|
|