Sql server 使用存储过程将数据表值插入或更新到数据库表中

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

我有一张桌子,如下所示:

此表将在C应用程序的网格中读取。应用程序可以编辑、删除或添加新行。更新后的网格将作为一个参数传入一个数据表,并传递给存储过程

我想开发一个以@typeCars作为输入的存储过程

现在,应在Cars表中更新已编辑的列,删除已删除的列,并添加新列

请让我知道如何在存储过程中实现这一点

我的尝试:

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;