2011-02-10 7 views
0

問題は少しありますが、解決策はわかりません!ストアドプロシージャ問合せの結果セットで変数を埋める

私はストアドプロシージャを書いています。これの機能は必要ありません。

タイプ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 

あなたの助けのおかげで、私の悪い英語のため申し訳ありません:ここで

は完全なストアドプロシージャです!

よろしくお願いいたします。

+0

'それは動作しませんでしたが!クエリのResultSetには常に1行があります! ' - 私はここで問題を理解しているかどうかはわかりません。時には複数の行を返すことを期待していますか?それとも行がないのでしょうか?それとも常に同じ値を返すと言っているのですか?このビットを明確にしてください。可能であれば、より良い説明のためにいくつかの例を使用してください。 –

答えて

2

、変数移入するために、次のコードを使用します。

DECLARE @ParentServiceProviderId int 

SELECT @ParentServiceProviderId = ParentServiceProviderId 
FROM ServiceProvider 
WHERE ServiceProviderId = @ServiceProviderId 
+0

ありがとう!それは解決策でした! :) – Alexo

+0

@Alex:うれしかったよ! :) – abatishchev

0

はこの変数にデフォルト値を割り当てないと、残りのコードは次のとおりです。とにかく

DECLARE @ParentServiceProviderId int 

SELECT @ParentServiceProviderId = ParentServiceProviderId 
           FROM ServiceProvider 
           WHERE ServiceProviderId = @ServiceProviderId 
+0

Thasはまた助けます!ありがとう!! – Alexo

関連する問題