【问题标题】:Dynamic parameters in a Stored Procedure?存储过程中的动态参数?
【发布时间】:2011-06-11 21:39:16
【问题描述】:

我需要使用列表框中的值更新表。我正在尝试创建与列表中的项目一样多的参数,我的代码如下,但是我如何以不同的方式命名它们?这样他们就不会互相覆盖?

 For Each item As ListItem In ris
        Dim pID As New SqlParameter("@userid", SqlDbType.Int)
        pID.Value = objFormat.CheckSQL(item.Value)
        myCommand.Parameters.Add(pID)
    Next

在 SQL 方面,是否可以编写一个更新语句,它将采用动态数量的参数?

例如,我需要在“活动”字段中更新具有相同值的多个用户...

【问题讨论】:

    标签: .net asp.net vb.net stored-procedures dynamic


    【解决方案1】:
    【解决方案2】:

    这是一个例子,基本上是在单个字符串参数中传递“列表”,用逗号(或其他)分隔,然后在存储过程中解析它。

    http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm

    还有这个

    Since there is no Sqlserver array parameter, what's the best way to proceed?

    【讨论】:

    • 谢谢,循环遍历列表项并多次调用存储过程是不是很糟糕?而不是在一个存储过程中完成所有操作?
    【解决方案3】:

    re:“谢谢,循环遍历列表项并多次调用存储过程是不是很糟糕?而不是在一个存储过程中完成所有操作?– xrum Jan 19 at 16:55”

    如果您考虑一下,您将在某处进行一些迭代 - 为什么不将所有值加载到列表中,并按照您的描述执行更新?如果是我,我会确保只打开一次连接:

        Dim CommandText As String = _
        "UPDATE MyTYable SET SomeField = @SomeField " & _
        "WHERE UserID = @UserID"
    
        Using cn As New SqlClient.SqlConnection(MyConnectionString)
            Using cmd As New SqlClient.SqlCommand(cn, CommandText)
    
                'The Record key in the database:
                cmd.Parameters.AddWithValue("@UserID", -1)
    
                'Whatever it is you plan to UPDATE:
                cmd.Parameters.Add("@SomeField", "")
    
                cn.Open()
    
                For Each Item As ListItem In ris
                    cmd.Parameters("@UserID").Value = Item.Value
                    cmd.Parameters("SomeField").Value = SomeValueFromSomeWhere
                    cmd.ExecuteNonQuery()
                Next
    
            End Using
        End Using
    

    显然,这需要根据您的特定用途进行一些调整。我不确定你在用你的 UserID 组装列表做什么,但上面的代码框架代表了一种相对有效的方法,可以执行一系列 INSERTS 或 UPDATES,而不会产生打开和关闭整个连接的开销。

    如果您需要执行的更新数量确实很繁重,那么上面提到的字符串连接方法之一可能更有效,和/或将所有要更新的值快速插入到 Db 背面的临时表中,然后是处理服务器上的批量 INSERT 的 SELECT INTO 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多