Sql server 使用存储过程将数据表值插入或更新到数据库表中
我有一张桌子,如下所示: 此表将在C应用程序的网格中读取。应用程序可以编辑、删除或添加新行。更新后的网格将作为一个参数传入一个数据表,并传递给存储过程 我想开发一个以@typeCars作为输入的存储过程 现在,应在Cars表中更新已编辑的列,删除已删除的列,并添加新列 请让我知道如何在存储过程中实现这一点 我的尝试:Sql server 使用存储过程将数据表值插入或更新到数据库表中,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有一张桌子,如下所示: 此表将在C应用程序的网格中读取。应用程序可以编辑、删除或添加新行。更新后的网格将作为一个参数传入一个数据表,并传递给存储过程 我想开发一个以@typeCars作为输入的存储过程 现在,应在Cars表中更新已编辑的列,删除已删除的列,并添加新列 请让我知道如何在存储过程中实现这一点 我的尝试: CREATE PROC sp_updateDataTable (@dtTypeCars dtTypeCars READONLY) AS BEGIN BEGIN TRY
CREATE PROC sp_updateDataTable (@dtTypeCars dtTypeCars READONLY)
AS
BEGIN
BEGIN TRY
DECLARE @dbMaxCarIdval INT;
DECLARE @typeCurrentCarIdVal INT;
SELECT TOP 1 @dbMaxCarIdval = id FROM Cars ORDER BY id DESC
IF (@dbMaxCarIdval >= (SELECT id FROM @dtTypeCars))
BEGIN
UPDATE Cars
SET Model = (SELECT Model FROM @dtTypeCars),
Company = (SELECT Company FROM @dtTypeCars)
WHERE id = (SELECT id FROM @dtTypeCars);
END
END TRY
BEGIN CATCH
PRINT 'I am in Catch';
END CATCH
END
请注意,dtTypeCars是如下类型
CREATE TYPE dtTypeCars AS TABLE
(
id INT NOT NULL,
Model varchar(50),
Company varchar(50)
)
使用Merge语句更新、插入和删除数据
问题要简短,描述问题的症结所在,不要只是出于模糊的目的而转储代码。为什么不直接将数据表绑定到数据库,并将更改直接应用到数据库。使用sp,您必须在每次行更新时调用它,并通过参数传递所有值,然后更新/添加到dbI中。我想您的意思是删除、插入和更新的行而不是列,以表类型作为源。我认为您不需要在@dttypecars上选择您不需要它,但这是一个很好的实践,类似于使用select col1,col2 from t而不是select*from t的实践,当col1,col2是t中唯一的列时。 MERGE Cars AS T USING (SELECT id, Model, Company from @dtTypeCars) AS S ON T.id = S.id WHEN MATCHED THEN UPDATE SET T.Model = S.Model,T.Company = S.Company WHEN NOT MATCHED BY TARGET THEN INSERT (id,Model,Company) VALUES (S.id, S.Model, S.Company) WHEN NOT MATCHED BY SOURCE THEN DELETE;