【问题标题】:How to add more than 10000 parameters to a single sql command如何为单个sql命令添加10000多个参数
【发布时间】:2011-01-31 09:28:35
【问题描述】:

我想为单个 sql 命令添加超过 10000 个参数。怎么可能? 据我所知,一个 sql 命令有 2100 个参数。

【问题讨论】:

  • 您不想向 SQL 命令添加超过 10000 个参数。
  • 我们骑着马穿过 WTF City 直奔地狱城。不,真的,为什么?也许有比使用 10k 参数更好的解决方案?
  • 这个问题有两个赞成票的事实让我觉得我做的问题投票是错误的。
  • @AakashM:OP 对他的问题的解决方案是一个坏主意这一事实并不意味着他的问题是一个坏问题。如果不出意外,这有点教育意义,因为回答它涉及到对有用内容的讨论,例如SqlBulkCopy

标签: c#


【解决方案1】:

我认为你应该回到“为什么”而不是直接跳到“如何”。听起来您可能正在做一些巨大的插入/更新,在这种情况下,更合适的解决方案是表值参数。

其他选项包括:

  • 传入xml并使用SQL server解析xml(这点挺好的)
  • 首先将数据加载到暂存表中,例如 SqlBulkCopy,然后执行命令(原始 TSQL 或 SPROC)将数据从暂存表推送到事务表中
  • 如果只是一个id列表,在服务器写一个“拆分”函数(udf),传入一个[n]varchar(max)
  • 将操作批量处理成一些更合理的命令

您真的不想在一个命令上使用 10k 个参数做某事;就是这样疯狂。

【讨论】:

  • 限制是 2100,因为在 2101,Shub-SQLurath 将被召唤,黑暗将吞噬地球,正如 Databasenomicron 中所预言的那样。
  • 我正在从 10000 个对象生成插入查询和 10000 个参数。我想通过单个命令执行此查询。有什么方法可以通过单次往返数据库来执行此查询?
  • @Engr - 不,这根本不是这样做的方法。将其分解为多个命令,或使用我上面提到的任何技巧。对于插入,表值参数几乎是针对这种情况设计 - 为什么不使用它们?
  • @w69rdy 往返旅行开始对你造成伤害
  • @w69rdy plus:任何人在我的一个系统上打开一个跨越 10k 往返的交易都会被击中
【解决方案2】:

你不能。 SQL Server 最多支持 2100 个参数。

您唯一的选择是生成一个包含所有这些参数值的 SQL 字符串。

顺便提一下,SQL CE 没有这个限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多