none
一个存储过程,怎么将由程序语言动态生成的字符串id列表传入? RRS feed

  • 问题

  • 例如这个语句

    select * from t_table where tID in('8aff1d2ee3c8473484ba11b4000684b6','cbeefdbf9081466d86d8ee29e5de83aa','a83a3dbff2094bda814b6bfa892d5633')


    我要把这个语句写成存储过程,其中的in里的参数,由外部传入动态的id列表,是大量的数字id的话,我能找到方法解决.但如果是大量的字符串id,例如GUID之类的字符串id.要怎么传入存储过程,?.最好不是在编程语言中拼接sql语句.


    2017年12月21日 11:50

答案

  • 变通参数的传入方法,原来是要传入N个参数,参数个数不确定,现在改为传入一个参数,参数值用分隔符号隔开,在SQL语句中再把它解析为N个参数值。

    方案A

    procedure Proc(@a nvarchar(1), @b nvarchar(10),@c nvarchar(10).....

    转化为方案B

    procedure Proc(@abc nvarchar(10))

    在SQL语句中,将参数abc解析为N个参数值。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年12月22日 0:54
  • 参数少,直接传。。参数多数百上万,建临时表,批插

    SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴

    2017年12月22日 3:06

全部回复

  • 动态生成这个查询,有几个参数值就生成几个参数。现在某些orm工具就是这么做的;

    除此之外就只能在拼接sql了。(程序或者在存储过程中拼接)

    除非这几个id是来源某个查询,或者临时表,这样查询的时候可以不用in,而是直接关联这个查询或者临时表;


    family as water

    2017年12月21日 12:34
  • 变通参数的传入方法,原来是要传入N个参数,参数个数不确定,现在改为传入一个参数,参数值用分隔符号隔开,在SQL语句中再把它解析为N个参数值。

    方案A

    procedure Proc(@a nvarchar(1), @b nvarchar(10),@c nvarchar(10).....

    转化为方案B

    procedure Proc(@abc nvarchar(10))

    在SQL语句中,将参数abc解析为N个参数值。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年12月22日 0:54
  • 参数少,直接传。。参数多数百上万,建临时表,批插

    SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴

    2017年12月22日 3:06