2016-08-19 7 views
0

リンクサーバーを使用して接続されている2台のサーバーがあります。この手順を実行すると、他のレコードにレコード1が挿入され、2番目のサーバーの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-rowin -linked-server – TheGameiswar

+0

insertステートメントの代わりに、他のサーバーにinsertストアドプロシージャを作成できますか?次に、出力パラメータとしてSCOPE_IDENTITYからIDを返します。 --LOL私は@TheGameiswarが投稿したリンクを見て、同じことを示唆しています。 :D –

答えて

0

あなたは

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 

その後、ストアドプロシージャを使用してint型の値を返すことができます助けてください他のサーバーの場合:

​​

エラーコードでこれを行う方が一般的です

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

これはとにかく動作するつもりはないと投稿されました。リモートサーバー上でIDを取得する必要があります。そして、@@ IDENTITYを使うことは、めったに良い選択ではありません。 SCOPE_IDENTITYは、ほとんど常により良い選択です。 –

関連する問題