sql存储proc语法

问题描述 投票:0回答:1

当我写这样的参数时有什么区别?我相信底部proc表示将默认值设置为null。顶部给我一个错误:

关键字“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

VS

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
sql
1个回答
2
投票

您无法更改TSQL存储过程参数的可为空性。它们总是可以为空。这就是第一点似乎正在做的事情。

您可以为存储过程参数指定默认值,这使它们成为可选参数。这就是第二位正在做的事情。

可以仅使用一个参数调用第二个过程,例如

exec [dbo].[Create_Part] @AssessmentPartId out
© www.soinside.com 2019 - 2024. All rights reserved.