2013-10-14 113 views
-1
ALTER PROCEDURE [dbo].[SP_ADD_CUSTOMER] 
(
    @CUSTOMER_NAME VARCHAR(100) 
) 
AS 
BEGIN 
    INSERT INTO CUSTOMER 
    ( 
     CUSTOMER_NAME 
    ) 
    VALUES 
    (
     @CUSTOMER_NAME 
    ) 
END 

將數據添加到我的數據庫後,如何獲得唯一ID?是否有捷徑可尋?通過INSERT添加返回的新ID

+0

ID是標識列嗎? – Amy

+6

備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

+1

@marc_s +1和[這實際上是VS代碼分析中的一個規則](http://msdn.microsoft.com/zh-cn/library/dd172115(v = vs.100).aspx) –

回答

3

如果您IDINT IDENTITY型的,那麼你可以使用SCOPE_IDENTITY()功能:

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 
3

其他答案告訴你如何獲得身份證,如果它是一個身份證。我讀了「唯一ID」,並假設你的ID是一個UNIQUEIDENTIFIER。因此,首先,我創建了一個表,看起來像:

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] 

然後創建一個存儲的過程是這樣的:

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 

最後我執行存儲過程,並得到了新的CUSTOMER_ID回:

DECLARE @RC int 
DECLARE @CUSTOMER_NAME varchar(100) = N'Joe' 

EXECUTE @RC = [dbo].[SP_ADD_CUSTOMER] 
    @CUSTOMER_NAME 
GO 

我希望這有助於!

+0

SELECT @CUSTOMER_ID AS CUSTOMER_ID有語法錯誤,你能檢查你的請再舉一個例子? – user2869820

+1

user2869820語法正確,沒有錯誤。你確定你正在運行整個代碼塊(不僅僅是「SELECT @CUSTOMER_ID AS CUSTOMER_ID」嗎? –

+0

我編輯了答案,爲你需要的所有東西提供代碼。 –