【问题标题】:Sql Stored Procedure With a Lot of Parameters带有大量参数的Sql存储过程
【发布时间】:2009-06-21 14:26:43
【问题描述】:

我使用的是 Sql Server 2008。我的存储过程接受近 150 个参数。性能方面有什么问题吗?

【问题讨论】:

    标签: sql sql-server-2008 stored-procedures


    【解决方案1】:

    当您使用 SQL Server 2008 时,您可以使用新的 Table 参数。 如果参数相同,可以很方便的使用table参数。

    这里是MSDN 的链接。 这里是another link,稍微解释一下

    享受吧。

    【讨论】:

      【解决方案2】:

      也许从性能的角度来看这不是问题。但从维护的角度来看。

      您可以考虑将数据作为单个 xml 参数发送。详情见:

      http://msdn.microsoft.com/en-us/library/dd788497.aspx

      【讨论】:

        【解决方案3】:

        在性能方面没有任何问题,但它闻起来可以用动态 SQL 更好地完成。不看代码很难分辨。

        【讨论】:

        • 使用经典的 ASP 代码生成动态 SQL,我个人认为程序是要走的路。这不是一个快速而肮脏的解决方案,但我认为一旦你开始工作,麻烦就会有很多好处。动态查询也必须防止 sql 注入。
        • 动态查询很容易通过强制使用参数而不是字符串连接来防止 sql 注入。在经典的 ASP 中不太容易做到,但没有什么是 vb6 无法做到的,并且集成为 COM 组件。
        【解决方案4】:

        最大值为 1,024, 但我认为150有点多

        【讨论】:

          【解决方案5】:

          SQL Server 新闻组中的常客会熟悉 Joe Celko 和 Tony Rogerson 之间的许多争吵,其中之一就是关于使用具有大量参数的存储过程是否是个好主意的问题。

          因为这个问题是关于性能的,所以这里是 Tony 的论点:

          Don't use CSV/XML - use 1,000 Parameters instead!

          托尼·罗杰森(Tony Rogerson)是英国人(美国 = limey),标题很讽刺(美国 = NULL)。

          【讨论】:

            【解决方案6】:

            您绝对应该找出所有参数的原因。

            1. 这些值是否要插入或更新到表中?那么您最好对这些值使用表值参数。
            2. 它们是复杂的选择标准吗?然后我怀疑您应该使用 XML 参数来传递选择标准;否则,您可能会重新评估实际使用各种标准的频率。在 80% 的情况下,您可能会发现更简单的 SP 可以满足您的需求。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-08-04
              • 2012-01-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多