代码之家  ›  专栏  ›  技术社区  ›  Vikas

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

  •  1
  • Vikas  · 技术社区  · 14 年前

    我创建了一个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>
    

    如果我删除它,它会给我一个错误,如无法将varchar转换为datetime,这意味着我们需要以正确的顺序传递所有参数。

    2 回复  |  直到 14 年前
        1
  •  3
  •   yfeldblum    14 年前

    看到了吗 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>
    
        2
  •  4
  •   Leigh josh poley    14 年前

    <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>