为什么用临时表(@tb)不行?

 

   这是个很让人头痛的问题

/*
* 执行一个sql的存储过程
*/
if exists(select *from sysobjects where name='proc_dingdang')

drop procedure proc_dingdang

go


create procedure proc_dingdang
--执行sql语句
@sqlone varchar(1000)

as

---- 创建一个临时表 1
declare @tb table(byer ntext not null,fare money not null)

-------创建一个临时表 2
declare @tbo table(a int)

---总钱数
declare @totalMoney money,

---人数
@number int

---1 把数据放入 @tbdingdang 表中
exec (N'insert '+@tb+''+@sqlone)

---2 对@t 表进行操作
insert @tbo
select dbo.f_split(byer,',') as byerCount
from @tb

-----3 查询出总价钱,总人数
select @number=sum(a) from @tbo

select @totalMoney=sum(fare) from @tb

-----4 显示信息
select @number as number,@totalMoney as Totmoney
go


为什么 报 必须声明标量变量 "@tb"。

 

  后续: 小朱我终于理解了,@tb 为什么要报错了,是一个很基础的问题,declare声明的是一个表变量,变量赋值只能通过两种方式: set ,select ;

            @tb 还没有赋值,所以会报错!小朱,谢谢大家对我的帮助,现在把正确的发给大家看看,存储过程很强大!

 

  正确的例子:

   /*
* 执行一个sql的存储过程
*/
if exists(select *from sysobjects where name='proc_dingdang')

drop procedure proc_dingdang

go


create procedure proc_dingdang
--执行sql语句
@sqlone varchar(1000)

as

---- 创建一个临时表 1 
create  #tb table(byer ntext not null,fare money not null)

-------创建一个临时表 2
declare @tbo table(a int)

---总钱数
declare @totalMoney money,

---人数
@number int

---1 把数据放入 @tbdingdang 表中
exec (N'insert '+@tb+''+@sqlone)

---2 对@t 表进行操作
insert @tbo
select dbo.f_split(byer,',') as byerCount
from @tb

-----3 查询出总价钱,总人数
select @number=sum(a) from @tbo

select @totalMoney=sum(fare) from @tb

-----4 显示信息
select @number as number,@totalMoney as Totmoney
go


 

转载于:https://www.cnblogs.com/z164729338/archive/2008/08/01/1258229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值