2016-08-19 40 views
0

我有兩臺使用鏈接服務器連接的服務器。當我運行這個程序時,它會向其他人插入一條記錄,那時我需要從我的第二臺服務器獲得ID--這是怎麼回事?SQL Server SCOPE_IDENTITY不運行鏈接服務器

Alter PROCEDURE [dbo].[stp_TransferJob] 
( 
    @JOB_id AS bigint, 
    @PartyId as int, 
    @Commission as decimal(18,2), 
    @myid as varchar(max), 
    @ident_out as bigint output 
) 
AS 
BEGIN 


INSERT INTO [111.163.103.122].Taxi.dbo.booking (FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,DriverId,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo,BookingDate,NoofPassengers,NoofLuggages,NoofHandLuggages,PickupDateTime,ReturnPickupDateTime,IsCompanyWise,CompanyId,FareRate,PaymentTypeId,SpecialRequirements,FromAddress,ToAddress,FromPostCode,ToPostCode,FromDoorNo,ToDoorNo,FromStreet,ToStreet,FromFlightNo,FromComing,BookingStatusId,DistanceString,AutoDespatch,AutoDespatchTime,AddOn,AddBy,AddLog,EditOn,EditBy,EditLog,OrderNo,PupilNo,ParkingCharges,WaitingCharges,ExtraDropCharges,MeetAndGreetCharges,CongtionCharges,TotalCharges,DepartmentId,ReturnFareRate 
,ArrivalDateTime,MasterJobId,DisablePassengerSMS,DisableDriverSMS,IsCommissionWise,DriverCommission,DespatchDateTime,JobOfferDateTime,BookingTypeId,DriverCommissionType,IsBidding,IsQuotation,CostCenterId,CashRate,AccountRate,WaitingMins 
,ExtraMile,AcceptedDateTime,POBDateTime,STCDateTime,ClearedDateTime,CancelReason,TotalTravelledMiles,CompanyPrice,SubCompanyId,PartyId, 
FromOther,ToOther,TransferJobId,TransferJobCommission,BookingTypeId,ViaString) 

SELECT 
FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,null,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo,BookingDate,NoofPassengers,NoofLuggages,NoofHandLuggages,PickupDateTime,ReturnPickupDateTime,IsCompanyWise,null,FareRate,PaymentTypeId,SpecialRequirements,FromAddress,ToAddress,FromPostCode,ToPostCode,FromDoorNo,ToDoorNo,FromStreet,ToStreet,FromFlightNo,FromComing,BookingStatusId,DistanceString,AutoDespatch,AutoDespatchTime,AddOn,AddBy,AddLog,EditOn,EditBy,EditLog,OrderNo,PupilNo,ParkingCharges,WaitingCharges,ExtraDropCharges,MeetAndGreetCharges,CongtionCharges,TotalCharges,DepartmentId,ReturnFareRate 
,ArrivalDateTime,MasterJobId,DisablePassengerSMS,DisableDriverSMS,IsCommissionWise,DriverCommission,DespatchDateTime,JobOfferDateTime,BookingTypeId,DriverCommissionType,IsBidding,IsQuotation,CostCenterId,CashRate,AccountRate,WaitingMins 
,ExtraMile,AcceptedDateTime,POBDateTime,STCDateTime,ClearedDateTime,CancelReason,TotalTravelledMiles,CompanyPrice,1,@PartyId 
,FromOther,ToOther,@JOB_id,@Commission,10,ViaString 

FROM Booking 
WHERE Id = @JOB_id ; 
select SCOPE_IDENTITY() 
SET @ident_out = @@IDENTITY 

------------------------------------------------------------------------- 
INSERT INTO [111.163.103.122].Taxi.dbo.booking_ViaLocations ( 
BookingId,ViaLocTypeId,ViaLocTypeLabel,ViaLocTypeValue,ViaLocId,ViaLocValue,ViaLocLabel ) 



SELECT 
@ident_out,ViaLocTypeId,ViaLocTypeLabel,ViaLocTypeValue,ViaLocId,ViaLocValue,ViaLocLabel 
FROM Booking_ViaLocations 
WHERE BookingId = @JOB_id 

END 
return @ident_out 

GO 

SCOPE_IDENTITY()和@@ IDENTITY SHOW NULL值如何獲得ID,請幫我

+0

嘗試在過程中提取標識並將其傳遞給輸出參數 – PacoDePaco

+1

http://stackoverflow.com/questions/5708996/best-way-to-get-identity-of-inserted-row-in -linked-server – TheGameiswar

+0

而不是插入語句,您可以在其他服務器上創建一個插入存儲過程?然後讓它從SCOPE_IDENTITY返回標識作爲輸出參數。 --LOL我只看了@TheGameiswar發佈的鏈接,它暗示了同樣的事情。 :D –

回答

0

您可以返回使用存儲過程INT值

create PROCEDURE [dbo].[stp_TransferJob] 
( 
    @JOB_id AS bigint, 
    @PartyId as int, 
    @Commission as decimal(18,2) 
) 
AS 
BEGIN 



    INSERT INTO [111.163.103.122].Taxi.dbo.booking (FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,DriverId,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo, 
    FromOther,ToOther,TransferJobId,TransferJobCommission,BookingTypeId,ViaString) 

    SELECT 
    FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,null,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo,FromOther,ToOther,@JOB_id,@Commission,10,ViaString 

    FROM Booking 
    WHERE Id = @JOB_id 

RETURN (@@IDENTITY) 

END 

然後當你打電話給你的程序在其他服務器上:

​​

由於通過錯誤代碼執行此操作比較常見,所以您mi ght更喜歡輸出參數:

create PROCEDURE [dbo].[stp_TransferJob] 
( 
    @JOB_id AS bigint, 
    @PartyId as int, 
    @Commission as decimal(18,2), 
    @ident_out as int output 
) 
AS 
BEGIN 



    INSERT INTO [111.163.103.122].Taxi.dbo.booking (FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,DriverId,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo, 
    FromOther,ToOther,TransferJobId,TransferJobCommission,BookingTypeId,ViaString) 

    SELECT 
    FromLocTypeId,ToLocTypeId,FromLocId,ToLocId,VehicleTypeId,null,ReturnDriverId,CustomerId,CustomerName,CustomerEmail,CustomerPhoneNo,CustomerMobileNo,JourneyTypeId,BookingNo,FromOther,ToOther,@JOB_id,@Commission,10,ViaString 

    FROM Booking 
    WHERE Id = @JOB_id 

SET @ident_out = @@IDENTITY 

END 

然後當您調用過程時,您添加一個帶有輸出關鍵字的聲明參數。請參閱msdn

+0

結果總是0 –

+0

我會在這裏輸出參數。來自存儲過程的返回旨在用於指示執行的狀態。它不打算返回數據。這是OUTPUT參數的用途。 –

+0

由於發佈,這是不會工作。您需要在遠程服務器上獲取身份。並且使用@@ IDENTITY很少是一個好選擇。 SCOPE_IDENTITY幾乎總是一個更好的選擇。 –