在动态sql里面如何返回动态变量的值?

leonhart 2005-08-12 11:18:07
我遇到的问题是
首先要在一张表里面找到最大的值和最小的值,然后对他们进行比较,然后才能确定接下来要做的事情。
问题就出来获得最大值和最小值的地方。因为表名也是从存储过程外面传进来一个参数,所以打算用动态sql,但是写在字符串里面的变量 @snMix @snMin总是报需要定义,小弟sql server2000初学者,实在找不到解决办法了,请各位大大帮帮忙。
一开始写的
SET @varSQL = "SELECT @snMax=MAX(SequenceNumber) ,@snMin=Min(SequenceNumber) "
+ "FROM " + @varTableName
+ " WHERE DeviceID=" + @nDeviceID + " AND UDCategory=" + @nCategoryID

然后想用两个procedure把最大值和最小值传出来,可还是没办法,下面是返回最小值的存储过程。我不知道该把stnMin这个输出变量放在哪里。
CREATE PROCEDURE dbo.DCP_prDataRecovGetMin
@@ndid INT,
@@nCid INT,
@@sTn NVARCHAR(40),
@@stnMin INT output

AS


DECLARE @strSQL NVARCHAR(400),
@strParam NVARCHAR(200),
@n_did INT,
@n_cid INT

SET @strSQL =N'SELECT MIN(SequenceNumber) as max FROM '
+ @@sTn + N' Where DeviceID=@n_did and UDCategory=@n_cid'
SET @strParam = N'@n_did INT, @n_cid INT'

EXECUTE sp_executeSQL @strSQL, @strParam,
@n_did=@@ndid,
@n_cid=@@nCid
GO
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2005-08-12
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo.DCP_prDataRecovGetMin
@@ndid INT,
@@nCid INT,
@@sTn NVARCHAR(40),
@@stnMin INT output
AS
BEGIN
DECLARE @strSQL NVARCHAR(4000),
@strParam NVARCHAR(200),
@n_did INT,
@n_cid INT,
@snMix INT,
@snMin INT

SET @strSQL = N'SELECT @snMin = MIN(SequenceNumber) FROM '
+ @@sTn + N' Where DeviceID=@n_did and UDCategory=@n_cid'
SET @strParam = N'@snMin INT OUT,@n_did INT,@n_cid INT'

EXECUTE sp_executeSQL @strSQL,
@strParam,
@snMin OUT,@n_did=@@ndid,@n_cid=@@nCid
END
GO
leonhart 2005-08-12
  • 打赏
  • 举报
回复
原来在sp_executeSQL 里面也能用 OUT,太棒了。
filebat 2005-08-12
  • 打赏
  • 举报
回复
只能用sp_executeSQL 了。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧