2016-08-23 6 views
1

私はSSMSで実行すると完全にデータを返すSQL Server 2008にストアドプロシージャがあります。 VBスクリプトコードからストアドプロシージャを呼び出すと、データは返されません。コードはSQLと同じデータを返しません

ストアドプロシージャのコード:

ALTER Procedure [dbo].[getstuff] 
    (@CompID int = NULL, 
    @FranID int = NULL, 
    @Type nvarchar (50) = NULL) 
    SELECT * 
    FROM Table1 
    WHERE CompID = @CompID 
     AND (FranID = @FranID OR @FranID IS NULL) 
     AND (PType = @Type OR @Type IS NULL) 

私は次のようにSSMSに手動でストアドプロシージャを実行します -

DECLARE @return_value int 
EXEC @return_value = [dbo].[getstuff] 
    @CompID = 1, 
    @FranID = 22, 
    @Type = NULL 

私はVBScriptのように実行すると、私は

を期待してい正確なデータを取得しますso -

strSql = "getstuff" 
    DBConn.AddParameter "@CompID", 1 
    DBConn.AddParameter "@FranID", 22 
    DBConn.AddParameter "@Type", NULL  

    Set TestRS = DBConn.GetRecordset(adCmdStoredProc, strSQL) 

データが戻ってきません。しかし、@Typeパラメータを使わないでこのように動作させると、@ Typeパラメータ -

strSql = "getstuff" 
    DBConn.AddParameter "@CompID", 1 
    DBConn.AddParameter "@FranID", 22 

    Set TestRS = DBConn.GetRecordset(adCmdStoredProc, strSQL) 

データが返されます。 @ FranIDと@TypeにNULLまたは実際のデータを渡すことができる必要があります。これは、私を狂ってしまう助けになるでしょう。

+1

本当にあなたの質問への答えではありませんが、ストアドプロシージャに既定値が指定されているので、NULLのパラメータを追加するのはなぜですか?追加しない場合、この問題は回避されます。 –

+1

'NULL'の代わりに' DBNull.Value'(またはVB6の同等物)を使ってみてください。 – yelxe

+1

@MartinParkinがすでに提案しているように、パラメータを設定しない方が良い方法です。私はストアドプロシージャにデフォルトが設定されているとき、このメソッドを常に使用します。 – Lankymart

答えて

1

私は、推奨されているようにパラメータを設定しないでください。

関連する問題