大别墅 2020-08-21 11:26 采纳率: 100%
浏览 242
已采纳

SQL Server中,如何向动态sql中传递表变量?即表变量如何在动态sql中使用

问题背景:


公司有这样的表

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这种扩展存储过程,有什么办法可以看到源码么?
谢谢大家

  • 写回答

1条回答 默认 最新

  • jingluan666 2020-08-21 13:13
    关注

    尝试使用表类型

    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/

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵