存储过程中变量的问题
CREATE PROC test1
@TableName sysname,
@NodeID int,
@NodeTopID int out
AS
DECLARE @TopID int
EXEC( 'SELECT @TopID=isnull(max(TopID), 0)+1 FROM '+@TableName+ ' WHERE ParentID= '+@NodeID+ ' ')
SET @NodeTopID=@TopID
GO
@TopID=isnull(max(TopID), 0)+1 这里出错,应该怎么写呀?
------解决方案--------------------------------------------------------------
EXEC( 'SELECT @TopID=isnull(max(TopID), 0)+1 FROM '+@TableName+ ' WHERE ParentID= '+@NodeID+ ' ')
----------------------------------------------
此处有两个问题:
1.如果列ParentID为字符型,此处应该写
EXEC( 'SELECT @TopID=isnull(max(TopID), 0)+1 FROM '+@TableName+ ' WHERE ParentID= ' ' '+@NodeID+ ' ' ' ')
否则结果可能为:WHERE ParentID=000001,这样就会出错.
如果列ParentID为数值型的则不必考虑
2.利用EXEC来执行语句时,语句中不能出现变量,也就是说这样是对的:
EXEC( 'SELECT isnull(max(TopID), 0)+1 FROM '+@TableName+ ' WHERE ParentID= ' ' '+@NodeID+ ' ' ' ')
而增加@TopID=后就会提示错误
如果一定要获取返回 值的话,可以使用SQL中的另一个函数sp_executesql
具体的语法可以参考SQL的联机帮助
------解决方案----------------------try
CREATE PROC test1
@TableName sysname,
@NodeID int,
@NodeTopID int out
AS
DECLARE @TopID int
declare @sql nvarchar(4000)
set @sql= 'SELECT @TopID=isnull(max(TopID), 0)+1 FROM '+@TableName+ ' WHERE ParentID= ' ' '+@NodeID+ ' ' ' '
sp_executesql @sql, N '@TopID int output ', @TopID output
SET @NodeTopID=@TopID
GO