2017-12-21 11 views
-1

このようなパラメータを書くときの違いは何ですか?私は下部のprocはnullにデフォルト値を設定すると言うと思います。先頭にエラーが表示されます:SQLストアドプロシージャの構文

キーワード 'NULL'の近くに構文が正しくありません。

CREATE PROCEDURE [dbo].[Create_Part] 
    @AssessmentPartId UNIQUEIDENTIFIER OUTPUT, 
    @assessmentPartCode VARCHAR(4) = NULL, 
    @assessmentPartCode VARCHAR(4) = NULL 
AS 
    SET @AssessmentPartId = NEWID() 
    INSERT INTO dbo.tblEMISAssessmentPart (AssessmentPartId, 
AssessmentPartcode, AssessmentPartCode) 
    VALUES (@AssessmentPartId, @assessmentPartCode, 
@assessmentPartCode) 
GO 
+0

SPROCパラメータは常にNULL可能です。 'NULL'と' NOT NULL'節はそれらに対して有効ではありません。 2番目の構文はデフォルトを与え、コールで指定しないようにします。 –

答えて

2

対スカラー変数

CREATE PROCEDURE [dbo].[Create_Part] 
    @AssessmentPartId UNIQUEIDENTIFIER OUTPUT, 
    @assessmentPartCode VARCHAR(4) NULL, 
    @assessmentPartCode VARCHAR(4) NULL 
AS 
    SET @AssessmentPartId = NEWID() 
    INSERT INTO dbo.tblEMISAssessmentPart (AssessmentPartId, 
AssessmentPartcode, AssessmentPartCode) 
    VALUES (@AssessmentPartId, @assessmentPartCode, 
@assessmentPartCode) 
GO 

を宣言する必要がありますがTSQLストアドプロシージャパラメータのNULL値の許容を変更することはできません。それらは常にNULL可能です。それが最初のビットがやっているようです。

ストアドプロシージャのパラメータを省略可能にすることができます。それは2番目のビットがやっていることです。

2番目の手順は、単に一つのパラメータで呼び出すことができ、例えば

exec [dbo].[Create_Part] @AssessmentPartId out 
+0

なぜ、sqlは最初のprocを正しく解析するのですか? – Princess

+0

それは重複した議論を持っています。一意にするとコンパイルされますが、プロシージャを呼び出すには3つのパラメータすべてを指定する必要があります。 –