在数据库的自定义函数中动态查询表

qqiuzaihui qqiuzaihui 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想自定义一个名为 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
...全文
评论 7
收藏 已收藏
分享
返回顶部
qqiuzaihui
数据库 4,017 成员 39,805 内容