SQL APIのテーブルにレコードを作成/更新する必要がある入力パラメータとしてアカウントを取得するWeb APIの作成に取り組んでいます。したがって、Webサービスは、アカウントを受け入れるストアドプロシージャを呼び出す必要があります。私は、Account
とCounterSeq
という2つの列を持つサンプルテーブルをデータベースに作成しました。テーブルのレコードを作成または更新するストアドプロシージャを作成しようとしています。作成または更新するストアドプロシージャ
各アカウントには、それに関連付けられているCounterSeq
を持つ必要があります。テーブルにAccount
が存在しない場合は、Account
という名前を作成し、CounterSeq = 001
を関連付けます。 Account
名がすでに存在する場合は、ちょうど私がこの
USE [Demo]
GO
-- Create the data type
CREATE TYPE projectName_TT AS TABLE
(
Account nvarchar(50),
CounterSeq int
)
GO
ようTABLETYPE、以下のようにストアドプロシージャを作成CounterSeq
このため
+---------+----------------+
| Account | CounterSeq |
+---------+----------------+
| ABC | 001 |
| DEF | 002 |
+---------+----------------+
CounterSeq + 1
に似更新が、私は新しいを挿入する方法行方不明です新しい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