为了账号安全,请及时绑定邮箱和手机立即绑定

sql 自定义函数传参

sql 自定义函数传参

红糖糍粑 2018-12-07 05:27:25
 可以传表名么? Create FUNCTION [dbo].[RecursionChildList]--创建一个递归父子表结构为(ID,NAME,PID)的函数( @PID int,--传入父级ID @TableName varchar(50),--传入查询表名称 @IsShowParent bit --是否插入父级)RETURNS @T TABLE(ID VARCHAR(10),Name VARCHAR(50),PARENTID VARCHAR(10),LEVEL INT)ASBEGIN DECLARE @INDEX INT SET @INDEX=1 IF @IsShowParent=TRUE BEGIN INSERT INTO @T SELECT ID,NAME,PARENTID FROM @TableName WHERE ID=@PID --插入当前级别 END INSERT INTO @T SELECT ID,NAME,PARENTID,@INDEX FROM @TableName WHERE PARENTID=@PID--插入PID下一级的数据 ---如果本级 WHILE @@ROWCOUNT>0 BEGIN SET @INDEX=@INDEX+1 INSERT INTO @T SELECT T1.ID,T1.NAME,T1.PARENTID,@INDEX FROM @TableName T1,@T T2 WHERE T1.PARENTID=T2.ID AND T2.LEVEL=@INDEX-1 END RETURNEND 服务器: 消息 137,级别 15,状态 2,过程 RecursionChildList,行 16必须声明变量 '@TableName'。服务器: 消息 137,级别 15,状态 1,过程 RecursionChildList,行 19必须声明变量 '@TableName'。服务器: 消息 137,级别 15,状态 1,过程 RecursionChildList,行 25必须声明变量 '@TableName'。 求解决
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

可以把sql语句赋给一个变量 比如 

SET @sql='insert into table1 .....'
然后
exec @sql
就可以了
查看完整回答
反对 回复 2019-01-07
?
智慧大石

TA贡献1946条经验 获得超3个赞

表名,列名要动态,参考动态SQL

查看完整回答
反对 回复 2019-01-07
  • 3 回答
  • 0 关注
  • 986 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信