私はDelphi 7とSQL Server 2008を使用しています。以下に示すように、私はダミーテーブルとダミーストアドプロシージャを作成しました。TADOStoredProcとSQL Serverストアドプロシージャのデフォルト値を
私はこのようなデルファイから上記の手順を呼び出していますCREATE TABLE [dbo].[Persons]
(
[P_ID] [int] IDENTITY(1,1) NOT NULL,
[LastName] [varchar](255) NOT NULL
)
CREATE PROCEDURE [dbo].[p_dummy_proc]
@p_id int,
@p_name VARCHAR(10) = 'dummy' -- donot pass anything from delphi and it should take 'dummy'
AS
BEGIN
IF (@p_name is null)
RAISERROR 123456 'why are you null'
ELSE
INSERT INTO dbo.persons(LastName)
VALUES(@p_name)
END
:Delphiコードで
procedure TForm1.Button1Click(Sender: TObject);
begin
try
ADOStoredProc1.Parameters.ParamByName('@p_id').Value := 10;
ADOStoredProc1.ExecProc; // error why are you null
except
on E: EDatabaseError do
ShowMessage(e.Message);
end;
end;
、私は2番目のパラメータを渡していないと私は、SQL Serverは、それはデフォルト値です取る必要があることを期待しています。
ストアドプロシージャを実行すると、エラーが発生します。 Delphiから何も渡さなかったときにSQL Serverがデフォルト値を使用しないのはなぜですか?
「ダミー」にパラメータ値を設定すると、期待どおりに動作しています。
あなたは正確に取得しているエラーは何ですか? – kirchner
@kirchner:質問をエラーで更新しました。エラーは "なぜあなたはヌルですか?"です。 – DelphiLearner
@nil ::私はパラメータのバインドされたプロパティを見ませんでした。 – DelphiLearner