2011-08-23 7 views
5

私はばかげているように感じますが、このSPの既定値を設定することはできません....ここでパラメータを宣言しています。私は@cacheStatusのためにデフォルトにnotReadyを得ることができない以外SQL Server 2008のストアドプロシージャの既定のパラメータ値

ALTER PROCEDURE [dbo].[PCS_DocumentCacheInsert] 
(
    @sessionId varchar(200), 
    @mrn varchar(50) , 
    @fromDate datetime, 
    @toDate datetime, 
    @aggregate varchar(50), 
    @author varchar(50), 
    @datePerformed dateTime, 
    @docId varchar(15), 
    @encounterId varchar(15), 
    @facility varchar(5), 
    @level char(1), 
    @orderedByAuthor varchar(50), 
    @resultAuthor varchar(50), 
    @resultCode varchar(5), 
    @resultId varchar(30), 
    @resultName varchar(30), 
    @status varchar(5), 
    @subType varchar(10), 
    @type varchar(10), 
    @security varchar(3), 
    @serviceGroup varchar(15), 
    @witmurNum varchar(10), 
    @deptId varchar(10), 
    @deptText varchar(40), 
    @cacheCreateTS dateTime , 
    @cacheStatus varchar(8) ='notReady', 
    @cacheUpdateTS datetime 
) 

すべてがこのprocのと正常に動作します。 Googleは正しい構文を使用していると言います。ここ

は私が= @return_value

GO

SELECT '戻り値は、' 私は今、この、その作業を追加しましたが、私は理解していない

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    @toDate = NULL, 
    @aggregate = NULL, 
    @author = N'author', 
    @datePerformed = NULL, 
    @docId = N'id', 
    @encounterId = NULL, 
    @facility = NULL, 
    @level = NULL, 
    @orderedByAuthor = NULL, 
    @resultAuthor = NULL, 
    @resultCode = NULL, 
    @resultId = NULL, 
    @resultName = NULL, 
    @status = NULL, 
    @subType = NULL, 
    @type = NULL, 
    @security = NULL, 
    @serviceGroup = NULL, 
    @witmurNum = NULL, 
    @deptId = NULL, 
    @deptText = NULL, 
    @cacheCreateTS = NULL, 
    @cacheStatus = NULL, 
    @cacheUpdateTS = NULL 

MS

で呼び出す方法ですなぜ私が右クリックしてストアドプロシージャを実行すると、ヌルチェックボックスを選択するのがなぜデフォルトにならないのでしょうか。私はnullをチェックすると、DBNullではなくprocに 'NULL'を送信すると思いますか?

if @cacheStatus is null 
begin 
    set @cacheStatus ='notReady' 
end 
+0

あなたはSPが呼び出されたかのサンプルを提供することができる任意のチャンス? – Justin

+0

構文がよさそうです。 @cachStatusに渡している値を確認してください。 (つまり、1つも渡していないことを確認してください)。 – Chains

+0

エンティティフレームワーク(WCFサービスから)とマネージメントスタジオで同じ動作を呼び出して、値をデフォルトにしないでください。 – cobolstinks

答えて

17

このパラメータの値としてnullを送信していないことは確かですか?デフォルトは、そのパラメータをまったく送信しない場合にのみ使用されます。あなたはこの問題を持っている場合

@JNKは、このような回避策を提案する:

IF @Cachestatus IS NULL SET @cachestatus = 'NotReady' 
+4

+1複数の処理を行うには、 'SELECT @cacheStatus = ISNULL(@ cacheStatus、 'notReady')、@Xyz = ISNULL(@ Xyz、 'abc')、...' @Cachestatus IS NULL SET @cachestatus = 'NotReady'' – JNK

+0

@JNkこれが個別の回答として追加されます。実際にはこれが彼の問題であれば、おそらく受け入れられるべきものでしょう。 – HLGEM

+0

@HL - あなたは 'NULL'を渡すことを指摘しなければ、それに気づかなかったでしょう。あなたの答えに行を追加してください。 – JNK

3

はこのようにそれを呼び出します。

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    @toDate = NULL, 
    @aggregate = NULL, 
    @author = N'author', 
    @datePerformed = NULL, 
    @docId = N'id', 
    @encounterId = NULL, 
    @facility = NULL, 
    @level = NULL, 
    @orderedByAuthor = NULL, 
    @resultAuthor = NULL, 
    @resultCode = NULL, 
    @resultId = NULL, 
    @resultName = NULL, 
    @status = NULL, 
    @subType = NULL, 
    @type = NULL, 
    @security = NULL, 
    @serviceGroup = NULL, 
    @witmurNum = NULL, 
    @deptId = NULL, 
    @deptText = NULL, 
    @cacheCreateTS = NULL, 
    [email protected] = NULL, 
    @cacheUpdateTS = NULL 

デフォルトは慣れるしたい場合は、@cacheStatusを渡すことはできません。

2

まだ言及されていない別のオプションは、NULL値を渡すのではなく、キーワード "DEFAULT"を使用することです。

SPを呼び出すときに、コードは次のようになります。

EXEC @return_value = [dbo].[PCS_DocumentCacheInsert] 
    @sessionId = N'asdfssa', 
    @mrn = N'asdf', 
    @fromDate = NULL, 
    ... Just got rid of some lines to focus on the param in question - see DEFAULT below 
    @cacheCreateTS = NULL, 
    @cacheStatus = DEFAULT, 
    @cacheUpdateTS = NULL 
関連する問題