我正在創建一個Web API,它將獲取帳戶作爲輸入參數,它必須創建/更新SQL Server表中的記錄。因此,Web服務將需要調用將接受該帳戶的存儲過程。我在數據庫中創建了一個示例表,只有兩列,分別爲Account
和CounterSeq
。我正在嘗試創建一個存儲過程來創建或更新表中的記錄。存儲過程來創建或更新
每個帳戶應該有一個與之關聯的CounterSeq
。如果表中不存在Account
,則創建Account
名稱並將CounterSeq = 001
與之關聯。如果Account
名已經存在,只是更新一樣CounterSeq
到CounterSeq + 1
+---------+----------------+
| Account | CounterSeq |
+---------+----------------+
| ABC | 001 |
| DEF | 002 |
+---------+----------------+
爲此,我創建這樣
USE [Demo]
GO
-- Create the data type
CREATE TYPE projectName_TT AS TABLE
(
Account nvarchar(50),
CounterSeq int
)
GO
一個TABLETYPE和存儲過程如下,但是我錯過了如何插入新記錄像一個新的Account
如何將CounterSeq
設置爲001?
USE [Demo]
GO
ALTER PROCEDURE [dbo].[uspInserorUpdateProjectName]
@projectName_TT AS projectName_TT READONLY
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
UPDATE prj
SET prj.Account = tt.Account,
prj.CounterSeq = tt.CounterSeq + 1
FROM dbo.[ProjectName] prj
INNER JOIN @projectName_TT tt ON prj.Account = tt.Account
INSERT INTO [dbo].[ProjectName](Account, CounterSeq)
SELECT tt.Account, tt.CounterSeq
FROM @projectName_TT tt
WHERE NOT EXISTS (SELECT 1
FROM [dbo].[ProjectName]
WHERE Account = tt.Account)
COMMIT TRANSACTION;
END;
我會需要它是001可能而不是1? – user4912134
根據你對錶格(圖片)的描述,數據類型是「int」。你放入數據庫的內容應該與它的顯示方式無關。 – DVT
最後一個問題是單獨插入/更新而不是合併有什麼問題。 – user4912134