プロが教えるわが家の防犯対策術!

SQL Serverのストアド中でUPDATEを実行すると
OUTパラメータの値が取得できなくなってしまいます。

何か制約などあるのでしょうか?
わかる方よろしくお願いします。

1.UPDATE文をコメントアウトすると取得できます。
2.UPDATEは正常に実行されています。

/**参考ソース**/
/**
下記プログラムは、引数で取得した文字列に
連番テーブルの値をインクリメントした値と
結合しOUTパラメータに、連番テーブルには、
インクリメント結果をセットしています。
**/

CREATE procedure xml_get_document_seq
@inDate varchar(14),
@outSeq varchar(18) output
as
begin
declare@Workvarchar(4)
declare@Seqvarchar(18)
declare@Numberdecimal(5)
declare@SeqDocvarchar(18)

if not exists(SELECT SEQ
FROM XML_DOCUMENT_SEQ) begin
INSERT INTO XML_DOCUMENT_SEQ(SEQ)
VALUES(0)
end

set @Seq= ISNULL(@inDate,'')

SELECT @Number = SEQ
FROM XML_DOCUMENT_SEQ

set @Number = @Number + 1
if @Number > 9999 begin
 set @Number = 1
end

set @Work= ISNULL(convert(varchar,@Number),'')
set @SeqDoc= @Seq
+ replicate('0', 4 - datalength(@Work))
+ @Work

UPDATE XML_DOCUMENT_SEQ
SET SEQ = @Number

Set @outSeq = @SeqDoc

return @Number
end
GO

A 回答 (1件)

提示いただいているソースで現象が発生するのでしょうか?



私も過去に同様の現象に見舞われた記憶があります。
そのときはUPDATEに不正があるのではなくて、
それまでの処理で不正があったことが原因だったような・・

プロシージャの実行はどうやってやられているのでしょうか?
クエリアナライザでプロシージャを呼び出してみたら
なにかしらのエラーが結果として表示されるかも・・

この回答への補足

実行は、VB.NETでADODB.Command
で行っています。

記載したソースは、本来の機能のままですが
現象確認のため
UOTパラメータに文字列を
セットした記述と
UPDATE文だけでも確認できました。

CREATE procedure xml_get_document_seq
@inDate varchar(14),
@outSeq varchar(18) output
as
begin

declare @Number decimal(5)
set @Number = @Number + 1

UPDATE XML_DOCUMENT_SEQ
SET SEQ = @Number

Set @outSeq = '200311202336000001'

return 0
end
GO

何らかのエラートラップを入れてみたほうが
よいのでしょうか?

補足日時:2003/11/20 23:32
    • good
    • 0
この回答へのお礼

少し判明したことがありました
ストアド自体はうまく実行されているようです。

クエリアナライザ上では正常にいきます。

ただ、VB.NETからだとうまくいきません。
ConnectionStringは、

Provider=SQLOLEDB.1
Data Source=サーバー名(サービス名)
Initial Catalog=データベース名
User Id=
Password=

こんな感じです。

お礼日時:2003/11/21 09:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す