簡體   English   中英

SQL Server身份問題

[英]SQL Server identity issue

我有一個如下查詢

declare @str_CustomerID int
Insert into IMDECONP38.[Customer].dbo.CustomerMaster
( CustomerName , CustomerAddress , CustomerEmail , CustomerPhone )
values ( ‘werw12e’ , ‘jkj12kj’ , ‘3212423sdf’ , ‘1212121′
)

select @str_CustomerID= scope_identity()

執行后,它在我的參數中返回null。

我想獲得身份的價值。 我怎樣才能做到這一點?

這里的主要問題是“IMDECONP38” - 我使用的服務器名稱。 如果我刪除它,我可以在我的參數中獲取身份的值。

針對類似問題,請參閱此舊問題:您無法從其他服務器檢索SCOPE_IDENTITY()等范圍變量。 相反,您應該使用遠程服務器上的存儲過程來實現此目的。

當你使用“IMDECONP38”然后你打破SCOPE_IDENTITY因為

  • INSERT范圍現在位於IMDECONP38鏈接服務器上
  • SCOPE_IDENTITY在本地服務器上運行,而不是在IMDECONP38上運行

如果在SQL Server 2005上,請嘗試OUTPUT子句,但我不確定它如何用於鏈接服務器調用

Insert into IMDECONP38.[Customer].dbo.CustomerMaster
OUTPUT INSERTED.ID   --change as needed
( CustomerName , CustomerAddress , CustomerEmail , CustomerPhone )
values ( ‘werw12e’ , ‘jkj12kj’ , ‘3212423sdf’ , ‘1212121′
)

編輯:Prutswonder首先說:在鏈接服務器上使用存儲過程

在遠程數據庫中使用存儲過程。

CREATE PROCEDURE InsertCustomer (@name varchar(100), @address varchar(100), 
    @email varchar(100), @phone varchar(100), @id int OUT)
AS
    INSERT INTO dbo.CustomerMaster 
    (CustomerName , CustomerAddress , CustomerEmail , CustomerPhone ) 
    VALUES (@name, @address, @email, @phone)

    SET @id = SCOPE_IDENTITY()
GO

DECLARE @id int
EXEC IMDECONP38.Customer.dbo.InsertCustomer 'Fred','Bedrock','a@b','5',@id OUT
GO

對於sql server 2012,獲取標識列的名稱

select col_name(sys.all_objects.object_id, column_id) as id from    sys.identity_columns 
join sys.all_objects on sys.identity_columns.object_id = sys.all_objects.object_id
where sys.all_objects.object_id = object_id('system_files')

如果您有Linked服務器,可以使用:

select iden.name as id 
from [LINKED_SERVER_NAME].[DATABASE_NAME].sys.identity_columns as iden
join [LINKED_SERVER_NAME].[DATABASE_NAME].sys.all_objects allobj
    on iden.object_id = allobj.object_id
where allobj.name = 'TABLE NAME HERE'
select @@IDENTITY AS 'variablename'

請檢查是否為您的表設置了任何觸發器 當您使用SCOPE_IDENTITY()獲取最后插入的標識字段時,這將導致問題。

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM