【问题标题】:Bulk Update stored procedure with user input (WITHOUT A DATATABLE)使用用户输入批量更新存储过程(没有数据表)
【发布时间】:2016-08-23 21:45:58
【问题描述】:

我能否使用存储过程执行批量更新,该存储过程将数据从用户输入发送到临时表中,而该用户输入不在数据表中。

如果我有一个 foreach 循环,它接受用户输入,例如来自复选框列表和文本框的值,我想知道的是如何在我的存储过程中参数化这些单独的值,或者我是否可以在我的代码中做到这一点。我不能使用表值参数,因为我使用的 SQL 版本不支持它。

 conn.Open();

 foreach(ListItem item in CheckBoxList1.Items)
 {
    if(item.Selected)
    {
        //handling parameters in loop.
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Update_Account_Table";
        cmd.Parameters["@SeqNum"].Value = amount.Text;
        cmd.Parameters["@SeqDate"].Value = DateTime.ParseExact(datepicker.Text, "mmddyyyy", CultureInfo.InvariantCulture);
        cmd.Parameters["@Account_ID"].CheckBoxList1.SelectedValue;

        cmd.ExecuteNonQuery();
    }

    conn.Close();
 }

存储过程

CREATE TABLE TempTable
(
    SeqNum int,
    SeqDate datetime,
    Account_ID varchar(2)
);  

CREATE PROCEDURE [ACCOUNTTABLE_UPDATE]
AS 
    SET NOCOUNT ON

    BEGIN
        UPDATE AccountTable
        SET SeqNum = t.SeqNum, SeqDate = t.SeqDate
        FROM AccountTable AT
        INNER JOIN TempTable t ON AT.AccountID = t.AccountID
    END

【问题讨论】:

标签: c# asp.net sql-server stored-procedures


【解决方案1】:

这在存储过程中使用动态表名,并根据传入参数设置值。您可以使用下面的代码代替临时表,或者使用参数@seqnum、@SeqDate、@AcctID 代替下面的@Stats_Value:

USE [EODData]
GO

/****** Object:  StoredProcedure [dbo].[erase_Stats]    Script Date: 8/23/2016 4:32:55 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[erase_Stats]
    @table varchar(25), @stats_value int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    Declare @ProductsSQL nvarchar(max);
SET @ProductsSQL = 'update ' + @table + ' set stats_completed = @Stats_Value'
exec sp_executesql @ProductsSQL
END

GO

【讨论】:

    【解决方案2】:

    你可以在表格前添加#来使其成为临时表格

    你应该是这样的

    CREATE TABLE #TempTable
    

    将创建临时表并在进程完成后销毁

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多