2016-05-26 117 views
0

我有一個查詢。我有一個名稱和ID作爲列的數據庫表中。它在該表中有22行包含信息。使用Microsoft SQL Server將整個表保存到數據庫

現在,我得到這些數據並顯示在用戶界面上。用戶可以添加新行,刪除任何行並保存表。

一旦用戶點擊保存,我希望整個表替換已經存在的表。這是通過存儲過程執行的。

整個數據庫表首先被刪除並保存新的條目。

然而,有時會出現這種情況,如果我添加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 
+0

是這個微軟的SQL服務器或[mysql](http://www.mysql.com/)? –

+0

@ JeffPuckettII-微軟sql服務器。 – Patrick

+0

@patrick你刪除整個表的原因是什麼?爲什麼現在插入/更新/刪除表中的行 – Hiten004

回答

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 
1

檢查#TEMP存在和之前選擇

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

並將#temp的名稱更改爲此sp唯一的內容,例如: - #ut創建 - 我猜測#temp是常見的用法。您可能還想考慮添加一些錯誤陷印。

相關問題