【问题标题】:Save entire table to database using Microsoft SQL Server使用 Microsoft SQL Server 将整个表保存到数据库
【发布时间】:2016-05-27 15:12:16
【问题描述】:

我有一个问题。我有一个数据库表,其中包含名称和 ID 作为列。该表中有 22 行包含信息。

现在,我得到这些数据并在 UI 上显示。用户可以添加新行,删除任何行并保存表格。

一旦用户点击保存,我希望整个表格替换已经存在的表格。这是通过存储过程执行的。

首先删除整个数据库表并保存新条目。

但是有时会发生这样的情况,如果我添加 3-4 行并保存它,数据库会被删除,但 22 行的新行 + 新添加的 3 行不会在表中更新。

谁能告诉我更换桌子的简单方法?

PS。表中没有唯一的 id。所以我无法更新行。我只需要删除整个内容并保存新的表格行。

存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [DATABASE1].[sp_usertable]
    (@in_params AS XML)
AS
BEGIN
    DELETE FROM dbo.usertable;

    SELECT
        T.x.value('./Name[1]','varchar(25)') as [Name] ,
        T.x.value('./ID[1]','varchar(6)') as [ID] ,
    INTO
        #Temp
    FROM
        @in_params.nodes('/ArrayOfData/Data') as T(x);

    BEGIN TRANSACTION
        INSERT INTO [dbo].[usertable] (Name, ID)
            SELECT Name, ID 
            FROM #Temp T

    COMMIT TRANSACTION

    DROP TABLE #Temp;
END

【问题讨论】:

  • 这是 microsoft sql server 还是 mysql?
  • @JeffPuckettII- microsoft sql server。
  • @patrick 你删除整个表的原因是什么?为什么现在在表中插入/更新/删除行
  • @I can't insert bcos 它只会添加当前表的副本。不能使用更新 bcoz 这里没有唯一的列。 tats y 删除并保存整个内容
  • 把存储过程代码放在这里给我们看看会有帮助。

标签: sql-server database stored-procedures


【解决方案1】:

您可以省略使用临时表并删除,然后直接选择到您的永久表中:

 USE [DATABASE1]
 GO

 SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO


ALTER PROCEDURE [DATABASE1].[sp_usertable]

(
 @in_params AS XML
 )
 AS
 BEGIN

  DROP TABLE dbo.usertable;

  select
  T.x.value('./Name[1]','varchar(25)') as [Name] ,
  T.x.value('./ID[1]','varchar(6)') as [ID] ,
  into  [dbo].[usertable]
  from @in_params.nodes('/ArrayOfData/Data') as T(x);


  END

【讨论】:

    【解决方案2】:

    检查#temp 是否存在并在选择之前删除

    if OBJECT_ID('tempdb..#TEMP') is not null 
        BEGIN
            DROP  TABLE #TEMP
        END
    

    并将#temp 的名称更改为此sp 独有的名称,例如:-#utcreate - 我猜#temp 是常见用法。您可能还想考虑添加一些错误捕获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2018-12-13
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多