我正在创建一个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