如何在ColdFusion中的SQL存储过程调用中处理默认参数?

时间:2010-07-30 11:08:43

标签: sql coldfusion

我已经创建了一个SQL存储过程:

CREATE PROCEDURE usp_MyTableInsert
...
@name varchar(100),
@birthdate datetime = NULL,
@phoneno varchar(10),
...

我从ColdFusion代码中调用它:

<cfstoredproc 
   datasource="training"
   procedure="usp_MyTableInsert">
   ....
   <cfprocparam cfsqltype="CF_SQL_VARCHAR" value="#form.name#" dbvarname="@name">
   <cfprocparam cfsqltype="CF_SQL_DATE" value="#ParseDateTime(form.birthdate)#" dbvarname="@birthdate">
   <cfprocparam cfsqltype="CF_SQL_VARCHAR" value="#form.phoneno#" dbvarname="@phoneno">
   ....
</cfstoredproc>

如果我不想将生日作为参数传递怎么办?它应该采用NULL值,因为我在SP中将其设置为默认值。 如果我删除它,它给我一个错误,如无法将varchar转换为datetime,这意味着我们需要以正确的顺序传递所有参数。

谢谢..

2 个答案:

答案 0 :(得分:4)

我个人的偏好是使用“null”属性的快捷方式,使用适当的日期检查。但只要提供所有必需的属性(例如cfsqltype),这两种技术都是有效的。

旁注“dbvarname”已弃用,因此请勿在新应用程序中使用它。

<cfstoredproc 
   datasource="training"
   procedure="usp_MyTableInsert">
   ...
   <cfprocparam cfsqltype="CF_SQL_VARCHAR" value="#form.name#">
   <cfprocparam cfsqltype="CF_SQL_DATE" value="#form.birthdate#" null="#not IsDate(form.birthdate)#">
   <cfprocparam cfsqltype="CF_SQL_VARCHAR" value="#form.phoneno#">
   ....
</cfstoredproc>

答案 1 :(得分:3)

请参阅the docs

<cfstoredproc datasource="training" procedure="usp_MyTableInsert">
    ....
    <cfprocparam value="#form.name#" dbvarname="@name">
    <cfif IWantToPassInBirthday eq "YES">
        <cfprocparam value="#ParseDateTime(form.birthdate)#" dbvarname="@birthdate">
    <cfelse>
        <cfprocparam null="YES" dbvarname="@birthdate">
    </cfif>
    <cfprocparam value="#form.phoneno#" dbvarname="@phoneno">
    ....
</cfstoredproc>