2012-01-20 4 views
0

他の人が書いたストアドプロシージャを修正しようとしています。基本的には、procはGroupingCodeの入力値を受け取り、そのグループ化コードに基づいて残りのテーブルを照会します。ストアドプロシージャを修正しますか?

ただし、null値が返されます。ここでは、元のストアドプロシージャは、次のとおりです。

ALTER PROCEDURE [dbo].[GetWebinars] (@GroupingCode  VARCHAR(MAX) = 'AVM', 
            @ItemNumber  VARCHAR(MAX) OUT, 
            @Title   VARCHAR(MAX) OUT, 
            @SubTitle   VARCHAR(MAX) OUT, 
            @ShortDescription VARCHAR(MAX) OUT, 
            @LongDescription VARCHAR(MAX) OUT, 
            @ShortImageUrl VARCHAR(MAX) OUT, 
            @MedImageUrl  VARCHAR(MAX) OUT, 
            @LgImageUrl  VARCHAR(MAX) OUT, 
            @GroupCode  VARCHAR(MAX) OUT) 
AS 
    SELECT @ItemNumber = prd.itemnumber, 
     @GroupingCode = prdtemp.groupingcode, 
     @Title = t.brochuredesc, 
     @SubTitle = prdtemp.SubTitle, 
     @ShortDescription = prdtemp.shortdescription, 
     @LongDescription = prdtemp.longdescription, 
     @ShortImageUrl = prdtemp.SmallImagePath, 
     @MedImageUrl = prdtemp.MediumImagePath, 
     @LgImageUrl = prdtemp.LargeImagePath 
    FROM pryor_producttemplate prdtemp 
     INNER JOIN pryor_prdItmmst prd 
      ON prdtemp.groupingcode = prd.groupcode 
     INNER JOIN pryor_topics t 
      ON prd.itemnumber = t.topiccode 
    WHERE prdtemp.groupingcode = @GroupingCode 
     AND t.country = 'U.S.A' 

    SELECT DISTINCT t.city, 
        t.country, 
        t.controlprice, 
        prd.itemnumber 
    FROM pryor_producttemplate prdtemp 
     INNER JOIN pryor_prdItmmst prd 
      ON prdtemp.groupingcode = prd.groupcode 
     INNER JOIN pryor_topics t 
      ON prd.itemnumber = t.topiccode 
    WHERE prdtemp.groupingcode = @GroupingCode 
     AND t.country = 'U.S.A' 

私は最初の行を変更し、

@GroupingCode varchar(max), 

@GroupingCode varchar(max) = 'AVM' 

を変更するには、入力値がハードコードされることを私には奇妙に思えました。

変更を行い、procをもう一度実行した後、私はnull値を取得しました。このprocは正しく書かれていますか?

これは読みにくい場合はお詫び申し上げます。私はMarkdownに慣れていない。

ありがとうございました。

Oceantrain

+1

'= 'AVM''は、それが提供されていない場合のデフォルト値であることを意味します。 –

+1

pryor_producttemplateテーブルに、指定された@GroupingCodeを持つ行がありますか? 2番目のクエリは、SQLエディタで実行しようとすると何かを返しますか? – Angelo

+0

お返事ありがとうございます。私は両方の方法でSQLエディタで実行しようとしました。デフォルト値は= 'AVM'に設定されています。実行して値 'AVM'を入力すると結果が得られます。 GroupingCode列から他の値を入力すると、Nullが返されます。 GroupingCodeテーブルとProductTemplateテーブルには健全なデータが格納されています。だから私はなぜ私は手順をテストするときに 'AVM'を入力するときに嫌がらせを得るのか分からない。 –

答えて

1

値がNULLに設定され、その後@GroupingCodeに

@GroupingCode varchar(max) 

結果に

@GroupingCode varchar(max) = 'AVM' 

を変更@GroupingCodeために供給されない、ある場合

これがあなたの問題?

+0

お返事ありがとうございます。私は両方の方法でSQLエディタで実行しようとしました。デフォルト値は= 'AVM'に設定されています。実行して値 'AVM'を入力すると結果が得られます。 GroupingCode列から他の値を入力すると、Nullが返されます。 GroupingCodeテーブルとProductTemplateテーブルには健全なデータが格納されています。だから私はなぜ私は手順をテストするときに 'AVM'を入力するときに嫌がらせを得るのか分からない。 –

+0

デフォルト値が定義されていないパラメータに値が指定されていない場合は、ストアドプロシージャが最初に実行されないことが予想されます。 –

関連する問題