这是我现在开裂的坚果
我正在开发的应用程序有一些针对SQL的高级处理.其中一个操作根据集合中的项目名称从不同的表中选择当前上下文中的对象的各种元数据.为此,执行一系列"select ... from ... where ... in()",并且为了防止恶意SQL代码,Sql参数用于构造"in()"子句的内容.
但是,当用于构造"in()"子句的项集合大于2100项时,由于每个查询的Sql Server限制了max 2100 Sql参数,因此失败.
我现在尝试的一种方法是创建一个#temp表来存储所有项目名称,然后在原始查询中加入表格,而不是使用"where in()".这让我对如何使用.NET代码中存储在数组中的项名称填充表格感到头疼.当然,必须有一些批量方式来插入所有内容,而不是为每个项目单独发布"插入"?
除此之外,我对解决这个问题的替代方法非常感兴趣.
非常感谢
一种可能的解决方法是使用查询XML的功能,并简单地将"in"的所有数据作为xml列发送,然后加入.
可以使用相同的方法来填充临时表,但是,为什么不直接使用它.
这是一个简短的示例,应该说明:
declare @wanted xml set @wanted = '' select * from (select 1 Id union all select 3) SourceTable where Id in(select Id.value('.', 'int') from @wanted.nodes('/ids/id') as Foo(Id)) 1 2
只需在应用程序中构建xml并将其作为参数传递.