为什么用临时表(@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