关于 SQL的存储过程中使用EXEC的格式 (本题有100。)(0分)

  • 主题发起人 主题发起人 youngyxy
  • 开始时间 开始时间
Y

youngyxy

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如下:
declare @sKeyName varchar(20)
declare @sTableName varchar(20)
declare @iTemp int
declare @SQlStr varchar(100)
Select @sKeyName=KeyName from Checks where TableName=@sTableName --这个格式正确
Set @SQLStr='Select Status from '+@sTableName+' where '+@sKeyName+'='+Convert(varchar(10),@iKey)
EXEC(@SQLStr)
----这个也是格式正确
现在我想取得 status的值(至多一个)赋给 @iTemp,以便过程其他部分使用。
注意: 我不想使用游标。

各位大虾,请多出主意。 up者有分。
 
也就是说,我想这样来用
set @SQLStr='Select @iTemp=Status from '+@sTableName+' where '+@sKeyName+'='+Convert(varchar(10),@iKey)
然后exec(@SQLStr)
但是,此时出错,原因@iTemp没有定义。
如果在@SQLStr中加入 declare @iTemp int
可以形式上解决这个没有定义的问题。但是,如何在存储过程的其他部分使用这个@iTemp????

 
不是啊,就是直接
set @iTemp='Select Status from '+@sTableName+' where '+@sKeyName+'='+Convert(varchar(10),@iKey)
不就可以了嘛??
然后就select @iTemp
 
楼上说的方法恐怕得跟盖茨先生商量一下才能实现了
我有一种方法,就是笨了点
Set @SQLStr='Select top 1 Status into tmptable from '+@sTableName+' where '+@sKeyName+'='+Convert(varchar(10),@iKey)
//将数据保存至一张临时表
EXEC(@SQLStr)
select @iTemp=select status from tmptable //从临时表取出
...
select @iTemp
...
drop table tmptable //删除临时表

最好方法还是找一个在过程中和@SQLStr中都能使用的变量,
有这种变量吗?
 
在SQL中没有试过,不过把他做成DLL或COM不也一样的效果吗?
 
不要以为sql server这么弱智,用sp_executesql就可以(而且微软推荐用sp_executesql
来代替exec,这涉及到事务重用)

例子:
Table1:
id test
------
1 语文
2 数学
3 英语

id int; test varchar(20)

===============
sp_executesql的用法示例
====================
DROP PROC TESTPROC
GO
CREATE PROC TESTPROC AS
declare @value varchar(20)
declare @strSQL Nvarchar(200)
set @strSQL = N'select @value=test from table1 where id=1'
exec sp_executesql @strSQL ,N'@value varchar(20) output',@value output
print @value

相关的一些讨论参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1327512
 
to rockjie
安你的办法,好象语法通不过。
to 独酷求败
你的方法的确可行,是一种办法
但是这个办法好象还不及使用游标。
我的问题的关键所在,正如你所说的::找一个在过程中和@SQLStr中都能使用的变量

我不知道能否做到。
各位,给出该问题的充分理由的否定答案,也是我所期盼的

请各位大虾赐教!!!

 
哦,换成
set @iTemp=(Select Status from '+@sTableName+' where '+@sKeyName+'='+Convert(varchar(10),@iKey))
@itemp不一定是int型啊
 
to blueRain
按照你的方法,
set @SQLStr=N'Select @iTemp=Status from @sTableName where @sKeyName=@iKey'
exec sp_executesql @SQLStr,N'@iTemp int Output',N'@sTableName varchar(20)',N'@sKeyName varchar(20)',N'@iKey int',
@iTemp Output,@sTableName,@sKeyName,@iKey
出错,说 @SQLStr不是Nchar等等

请再帮忙
 
拜托好好看看sp_executesql的联机帮助和我那个例子。
@SQLstr必须是nvarchar,nchar或者ntext类型,所以你肯定没有将@SQLstr
定义成nchar或nvarchar类型。
 
同意&UP
 
谢谢诸位
尤其bluerain

请各位去
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1271610
领分
thanks
 
bluerain 70,
独酷求败 10,
其余兄弟 5分
 
后退
顶部