問題は少しありますが、解決策はわかりません!ストアドプロシージャ問合せの結果セットで変数を埋める
私はストアドプロシージャを書いています。これの機能は必要ありません。
タイプintから変数を宣言したいとします。
この変数は、SQLクエリの値を取得する必要があります。
私の試み:
DECLARE @ParentServiceProviderId int = null
SET @ParentServiceProviderId = (SELECT ParentServiceProviderId
FROM ServiceProvider
WHERE ServiceProviderId = @ServiceProviderId)
それは動作しませんでした!クエリのResultSetには常に1つのRowがあります。
この問題の解決方法はわかりません。
ALTER PROCEDURE [dbo].[InsertCarmakerPartnership_ChildToParent]
@ServiceProviderId int,
@CarmakerId int,
@ValidFrom datetime,
@ValidTo datetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @parentSPPId int, @parentSPPParentId int, @superParentId int, @ParentServiceProviderId int = null
SET @ParentServiceProviderId = (SELECT ParentServiceProviderId
FROM ServiceProvider
WHERE ServiceProviderId = @ServiceProviderId)
DECLARE ServiceProviderParent_Cursor CURSOR FOR
SELECT ServiceProviderId, ParentServiceProviderId
FROM ServiceProvider
WHERE ServiceProviderId = @ParentServiceProviderId
OPEN ServiceProviderParent_Cursor;
FETCH NEXT FROM ServiceProviderParent_Cursor INTO @parentSPPId, @parentSPPParentId
IF (@ParentServiceProviderId is NULL)
BEGIN
SET @superParentId = @ServiceProviderId
EXEC InsertCarmakerPartnership_ParentToChild @superParentId, @CarmakerId, @ValidFrom, @ValidTo;
END
WHILE @@FETCH_STATUS = 0
BEGIN
IF @ServiceProviderId > 0
BEGIN
EXEC InsertCarmakerPartnership_ChildToParent @parentSPPId, @CarmakerId, @parentSPPParentId, @ValidFrom, @ValidTo ;
IF (SELECT COUNT(*) FROM dbo.CarmakerPartnership WHERE ServiceProviderId = @parentSPPId AND CarmakerId = @CarmakerId AND IsDeleted = 0) = 0
BEGIN
INSERT INTO dbo.CarmakerPartnership (CarmakerId, ServiceProviderId, CreatedBy, ChangedBy, ValidityPeriodFrom, ValidityPeriodTo) VALUES (@CarmakerId, @parentSPPId, SYSTEM_USER, SYSTEM_USER, @ValidFrom, @ValidTo)
END
END
FETCH NEXT FROM ServiceProviderParent_Cursor INTO @parentSPPId, @parentSPPParentId
END;
CLOSE ServiceProviderParent_Cursor;
DEALLOCATE ServiceProviderParent_Cursor;
END
あなたの助けのおかげで、私の悪い英語のため申し訳ありません:ここで
は完全なストアドプロシージャです!
よろしくお願いいたします。
'それは動作しませんでしたが!クエリのResultSetには常に1行があります! ' - 私はここで問題を理解しているかどうかはわかりません。時には複数の行を返すことを期待していますか?それとも行がないのでしょうか?それとも常に同じ値を返すと言っているのですか?このビットを明確にしてください。可能であれば、より良い説明のためにいくつかの例を使用してください。 –