对于存储过程中传入参数是否设置默认值的心得

下面三句话是Microsoft相关网站的专业解释。

通过为可选参数指定默认值,可创建带有可选参数的存储过程。执行该存储过程时,如果未指定其他值,则使用默认值。

如果在存储过程中没有指定参数的默认值,并且调用程序也没有在执行存储过程时为该参数提供值,那么会返回系统错误,因此指定默认值是必要的。

如果不能为参数指定合适的默认值,则可以指定NULL 作为参数的默认值,并在未提供参数值而执行存储过程的情况下,使存储过程返回一条自定义消息。

create PROCEDURE [dbo].[US_Patient_Practice]

    @FAgentIDint,

    @FSortvarchar(50)='FFirstSite',

    @FDescvarchar(4)='ASC',

    @FBinDatevarchar(50),--开始时间

    @FEndDatevarchar(50)--结束时间

 

as

declare @SSQL varchar(4000)

--US_Patient_Practice14,'FFirstSite','asc'

如上述存储过程中开始时间和结束时间是没有默认值的,下面执行存储过程语句是没有给开始时间参数中和结束时间赋值的,此时发生如下错误

消息 201,级别 16,状态 4,过程US_Patient_Practice,第 18 行

过程或函数'US_Patient_Practice' 需要参数 '@FBinDate',但未提供该参数。

在程序中调用该存储过程时,即使我们在页面上未对该参数进行赋值,只要在调用存储过程语句时,给参数赋值,就不会发生错误。

VSQL = String.Format("US_Patient_SelectPart{0},'{1}','{2}','{3}','{4}'", ddlFAgent.SelectedValue, sortField,sortDirection, tbx_FBegDate.Text, tbx_FEndDate.Text)

在vb语句中上述语句中tbx_FBegDate.Text和tbx_FEndDate.Text,即使我们在页面中没有对这俩个日期控件选择,此时其实debug下可观察到其值为””即为空字符串。

 

 

你可能感兴趣的:(sql存储过程心得,asp.net,sql存储过程)