在数据库的自定义函数中动态查询表
我想自定义一个名为 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
指定列中的值重复.
当我直接在该函数内部使用 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
...全文
相关推荐
封装DB源码
一个封装了数据库访问的模板类,有一定参考价值。
里面有mysql基本操作,自定义jsp标签,XML的解析
可以选择查看我的博客,我把文档的内容分了好几次发博客
tp5.1 框架数据库高级查询技巧实例总结
主要介绍了tp5.1 框架数据库高级查询技巧,结合实例形式总结分析了tp5.1 框架数据库快捷查询、区间查询、批量查询、闭包查询等相关高级查询使用技巧,需要的朋友可以参考下
基于Facebook的Hive开发
基于Facebook的Hive开发(Hive development at Facebook)
oracle傻瓜问题1000问
oracle问题1000问,呃。。当然,高手是不需要看这个的~O(∩_∩)O~


数据库
