在数据库的自定义函数中动态查询表
我想自定义一个名为 GETROWID 的自定义函数, 通过传入 [表名] 及 [列名] , 产生一个行ID号, 该行ID号不与
指定列中的值重复.
当我直接在该函数内部使用 PRINT 打印 @RowID 值, 结果正确的;
但在存储过程中调用该函数时, 提示的出错内容为: "只有函数和扩展存储过程才能从函数内部执行". 附上我的
代码, 请大家帮我解决一下. 谢谢.
附: 要想实现上面的功能, 有没有更好的办法呀. 请大家指点一二!
/**************************************************************************************************
** 功能:查询指定表的指定列, 产生一个行ID号, 该行ID号的值不与指定列中的值重复
** 输入:@TabName:表名, @ColumnName:列名
** 输出:行ID号
** 说明:调用方法:value = DBO.GETROWID('PatEmployee', 'PatEmpID')
**************************************************************************************************/
CREATE FUNCTION GETROWID(@TabName VARCHAR(50), @ColumnName VARCHAR(50))
RETURNS INTEGER
AS
BEGIN
DECLARE @Sql NVARCHAR(100)
DECLARE @RowID INTEGER
DECLARE @ID INTEGER
SET @RowID=1
__FINDLINEID:
BEGIN
SET @Sql = 'SELECT @ID=' +@ColumnName+ ' FROM ' +@TabName+ ' WHERE ' +@ColumnName+ '=' +RTRIM(@RowID)
EXEC sp_executesql @Sql, N'@ID INTEGER OUTPUT', @ID OUTPUT --只有函数和扩展存储过程才能从函数内部执行
IF(@ID IS NOT NULL)
BEGIN
SET @RowID = @RowID + 1
GOTO __FINDLINEID
END
RETURN @RowID -- 当调用该函数时, 提示出错:只有函数和扩展存储过程才能从函数内部执行
PRINT @RowID -- 打印 @RowID 值, 结果正确
END
END