使用用户输入批量更新存储过程(没有DATATABLE)

本文关键字:存储过程 没有 DATATABLE 更新 用户 输入 | 更新日期: 2023-09-27 18:03:44

是否可以使用存储过程将用户输入的数据发送到临时表中,而这些数据不在数据表中?

如果我有一个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

使用用户输入批量更新存储过程(没有DATATABLE)

在存储过程中使用动态表名,并根据传入的参数设置值。您可以使用下面的代码来代替临时表,或者使用参数@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

您可以在表前添加#,使其成为临时表

你应该像

CREATE TABLE #TempTable

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