GETDATEでストアドプロシージャを呼び出す ')'の近くの構文が正しくありません


120

多分私は「午後」の瞬間を持っていますが、なぜ私が得るのか誰にでも説明できますか

メッセージ102、レベル15、状態1、行2
「)」付近の構文が正しくありません。

実行中

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

回答:


169

ストアドプロシージャの引数として関数呼び出しを渡すことはできません。代わりに、中間変数を使用します。

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
この制限の理由はありますか?
Zameer 2016年

@studentブール型と整数型の列の欠如やOracleでのフィルターされたキーの欠如などの基本的な制限の理由はありますか?
スキッパー2018

20

ミッチ小麦は述べたあなたは関数を渡すことはできません。

あなたのケースでは、事前計算された値またはGETDATE()で渡す必要がある場合-デフォルト値を使用できます。たとえば、ストアドプロシージャを変更します。

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

そして試してください:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

備考:ここでは、このパラメータにNULL値が使用されていないことを想定しています。そうでない場合-別の未使用の値、たとえば「1900-01-01 00:00:00.000」を使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.