Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回由INSERT添加的新ID_C#_Sql Server_Stored Procedures - Fatal编程技术网

C# 返回由INSERT添加的新ID

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

在向数据库添加数据后,如何获得唯一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
    (
       @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吗?我编辑了答案以提供你所需的所有代码。