int stable,MNumber; //全局变量
EXEC SQL CREATE Procedure table_name
@tablename char(10),@ID int
As exec('insert into ' +@tablename+ ' values(' +@ID+ ',1,1,1,1,1,1,1,1,1,1)'); //AEXEC SQL CREATE Procedure ge_number
@table nvarchar(50),
@cnt int output
AS
declare @sql nvarchar(100)
set @sql=N'select @cnt=number into :MNumber from '+@table
exec sp_executesql @sql ,N'@cnt int output' , @cnt output; //BEXEC SQL declare @cnt int;
EXEC SQL exec ge_number table,@cnt output; //C
EXEC SQL EXEC table_name :stable,:MNumber; //D已经实现了文中A部分表名和某一参数都可以是变量
现在是想在B部分实现一个能去某一个确定的表table中查询其中的Number,并将其赋值给全局变量MNumber,这样再在D部分中就可以实现表名和参数都可以是变量的存储过程:stable,:MNumber
ps.文中C部分是版上某位大侠帮忙的,可能意思理解错了,不需要再在这里表名作变量了,能否将C部分改为EXEC SQL exec ge_number @cnt output; 就可以运行的呢
不知道我说清楚了没有,谢谢大家了啊
总之,就是想实现如下的效果
EXEC SQL declare @cnt int;
EXEC SQL exec ge_number @cnt output;
再让MNumber=cnt
EXEC SQL EXEC table_name :stable,:MNumber;
declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @output_result int--查询结果赋给@output_result set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 为输出结果参数
set @paramstring='@totalcount int output' --设置动态语句中参数的定义的字符串,多个参数用","隔开
exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
select @output_result
当然,输入与输出参数可以一起使用,大家可以自己去试一试。
另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法.
IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
drop table #tmp
select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同 declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
set @QueryString='select * from tablename '
insert into #tmp(field1,field2,...) exec(@querystirng)
EXEC SQL declare @cnt int;
EXEC SQL exec ge_number @cnt output; //取出参数
再让MNumber=cnt //再将取出的参数赋值给外部变量MNumber
EXEC SQL EXEC table_name :stable,:MNumber; //再在另外一个存储过程里面实现表名,参数都是变量的查询