C# 返回由INSERT添加的新ID
在向数据库添加数据后,如何获得唯一ID?有没有一种简单的方法可以做到这一点?如果您的ID列是INT-IDENTITY类型,那么您可以使用SCOPE\u-IDENTITY函数:C# 返回由INSERT添加的新ID,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,在向数据库添加数据后,如何获得唯一ID?有没有一种简单的方法可以做到这一点?如果您的ID列是INT-IDENTITY类型,那么您可以使用SCOPE\u-IDENTITY函数: ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER] ( @CUSTOMER_NAME VARCHAR(100) ) AS BEGIN INSERT INTO CUSTOMER ( CUSTOMER_NAME ) VALUES
ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER]
(
@CUSTOMER_NAME VARCHAR(100)
)
AS
BEGIN
INSERT INTO CUSTOMER
(
CUSTOMER_NAME
)
VALUES
(
@CUSTOMER_NAME
)
END
这是假设您的唯一ID是一个标识列。如果不是这样,请澄清你的问题
ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER]
(@CUSTOMER_NAME VARCHAR(100))
AS
BEGIN
INSERT INTO CUSTOMER(CUSTOMER_NAME)
VALUES(@CUSTOMER_NAME)
SELECT SCOPE_IDENTITY() -- this will retrieve and send back the newly inserted IDENTITY value
END
作为旁白。另外,.其他答案已经向您展示了如何获取标识(如果是标识)。我读取了唯一ID,并假设您的ID是唯一标识符。首先,我创建了一个如下表:
ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER]
@CUSTOMER_NAME VARCHAR(100),
@NewID INT OUTPUT
AS
BEGIN
INSERT dbo.CUSTOMER(CUSTOMER_NAME) SELECT @CUSTOMER_NAME;
SET @NewID = SCOPE_IDENTITY();
END
GO
CREATE TABLE [dbo].[CUSTOMER](
[CUSTOMER_ID] [uniqueidentifier] NOT NULL,
[CUSTOMER_NAME] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_CUSTOMER] PRIMARY KEY CLUSTERED
(
[CUSTOMER_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
然后,我创建了一个如下所示的存储过程:
ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER]
@CUSTOMER_NAME VARCHAR(100),
@NewID INT OUTPUT
AS
BEGIN
INSERT dbo.CUSTOMER(CUSTOMER_NAME) SELECT @CUSTOMER_NAME;
SET @NewID = SCOPE_IDENTITY();
END
GO
CREATE TABLE [dbo].[CUSTOMER](
[CUSTOMER_ID] [uniqueidentifier] NOT NULL,
[CUSTOMER_NAME] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_CUSTOMER] PRIMARY KEY CLUSTERED
(
[CUSTOMER_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
最后,我执行了存储过程并取回了新的客户ID:
CREATE PROCEDURE [dbo].[SP_ADD_CUSTOMER]
(
@CUSTOMER_NAME VARCHAR(100)
)
AS
BEGIN
DECLARE @CUSTOMER_ID UNIQUEIDENTIFIER = NEWID()
INSERT INTO CUSTOMER
(
CUSTOMER_ID,
CUSTOMER_NAME
)
VALUES
(
@CUSTOMER_ID,
@CUSTOMER_NAME
)
SELECT @CUSTOMER_ID AS CUSTOMER_ID
END
我希望这有帮助 ID是标识列吗?旁注:存储过程不应使用sp_uuu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀@marc_s+1,你需要更好地定义你所说的唯一ID是什么意思-这是一个标识列,一个默认为NEWID或NEWSEQUENTIALID的唯一标识符,完全是其他的东西…选择@CUSTOMER_ID,因为CUSTOMER_ID有语法错误,你能再次检查你的示例吗?user2869820语法正确,没有错误。你确定你正在运行整个代码块而不仅仅是选择@CUSTOMER\u ID作为CUSTOMER\u ID吗?我编辑了答案以提供你所需的所有代码。