问题背景:
公司有这样的表
id , name , parentID
1 , A , 0
2 , B , 1
3 , C , 1
4 , D , 3
5 , E , 3
6 , F , 4
需要得到结果为
level1,level2,level3,level4
1,2
1,3,4,6
1,3,5
这样结构的表。
我写了函数,使用递归可以得到结果。
后面想要把这个方法封装起来,以便后续对其他同结构的表也能有这样的查询。
但是封装过程中,需要用到动态sql,所以将函数改成了存储过程。(因为SQL提示函数中不能使用存储过程)。
但是使用动态SQL时出现了问题。
问题描述:
动态sql中,使用一般的int,varchar等类型的参数,都没问题。
但是在我的这个存储过程中,需要将表变量传入到动态SQL。
网上查询了关于 sp_executesql的用法。但是没有找到关于传入表变量的内容。
问题1:表变量是否可以传入到sp_executesql中
问题2:如果可以,具体用法是怎么样的?
问题3:sp_executesql这种扩展存储过程,有什么办法可以看到源码么?
谢谢大家
尝试使用表类型
CREATE TYPE mytb AS TABLE
( id int,name nvarchar(50));
go
DECLARE @tb mytb;
insert into @tb values(1,'a')
declare @sql nvarchar(max)
set @sql=N'select * from @tb'
Exec Sp_ExecuteSql @sql, N'@tb mytb READONLY',@tb
https://sqlstudies.com/2018/09/13/using-table-valued-parameters-with-sp_executesql/