使用用户输入批量更新存储过程(没有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
在存储过程中使用动态表名,并根据传入的参数设置值。您可以使用下面的代码来代替临时表,或者使用参数@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
将创建临时表,并在进程完成后销毁