Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在ColdFusion 2016中向存储过程传递的参数太多,存在问题_Sql Server_Stored Procedures_Parameters_Coldfusion_Coldfusion 2016 - Fatal编程技术网

Sql server 在ColdFusion 2016中向存储过程传递的参数太多,存在问题

Sql server 在ColdFusion 2016中向存储过程传递的参数太多,存在问题,sql-server,stored-procedures,parameters,coldfusion,coldfusion-2016,Sql Server,Stored Procedures,Parameters,Coldfusion,Coldfusion 2016,在我们最近从ColdFusion 2010升级到ColdFusion 2016之前,我在一个应用程序中有几个存储过程运行得非常好(多年)。现在,我收到的错误消息可能是参数太多,或者某个参数不在调用的过程中 我选择上传一些代码,这样人们可以更好地理解实际发生的事情。还在学习如何在这里格式化代码,所以请原谅我,如果它仍然缺乏 在这两种情况下,我都在过程调用中仔细检查了存储过程中的参数列表,发现它们确实都是正确的。事实上,在过去的5年里,该代码没有任何变化。此行为仅在升级后才开始 下面是第一个例子。我

在我们最近从ColdFusion 2010升级到ColdFusion 2016之前,我在一个应用程序中有几个存储过程运行得非常好(多年)。现在,我收到的错误消息可能是参数太多,或者某个参数不在调用的过程中

我选择上传一些代码,这样人们可以更好地理解实际发生的事情。还在学习如何在这里格式化代码,所以请原谅我,如果它仍然缺乏

在这两种情况下,我都在过程调用中仔细检查了存储过程中的参数列表,发现它们确实都是正确的。事实上,在过去的5年里,该代码没有任何变化。此行为仅在升级后才开始

下面是第一个例子。我将列出过程调用(在cfscript中) 首先是存储过程中的参数列表,然后是它生成的错误消息:

public query function readStorage(numeric group1=0,numeric group2=0) {  
     local.group1Value = arguments.group1?arguments.group1:"";  
     local.group2Value = arguments.group2?arguments.group2:"";  
     spService = new storedproc();   
     spService.setDatasource(variables.dsn);  
     spService.setUsername(variables.userName);  
     spService.setPassword(variables.password);   
     spService.setProcedure("usp_readCompatibilityStorage");
     spService.addParam(dbvarname="@group1Id",cfsqltype="cf_sql_integer"
           , type="in",value=local.group1Value,null=!arguments.group1);  
     spService.addParam(dbvarname="@group2Id",cfsqltype="cf_sql_integer"
          ,type="in",value=local.group2Value,null=!arguments.group2);  
     spService.addProcResult(name="rs1",resultset=1);  

     local.result = spService.execute();   

     return local.result.getProcResultSets().rs1;   
}  
下面是存储过程中的参数列表:

 @groupId1  int = NULL        
,@groupId2  int = NULL
@cribIdList         varchar(500) = NULL  
,@cribNumber        int = NULL  
,@isAnnex           varchar(3) = NULL  
,@siteId            int = NULL  
,@parentCribIdList  varchar(500) = NULL  
,@supervisorId      int = NULL  
,@statusId          int = NULL  
,@orderBy           varchar(50)  
下面是我收到的错误消息:

[Macromedia][SQLServer JDBC驱动程序][SQLServer]@group1Id不是 程序usp\U readCompatibilityStorage的参数

第二个例子:

public query function read(string cribIdList="",  
                        numeric cribNumber=0,  
                        string isAnnex="",  
                        numeric siteId=0,  
                        string parentCribIdList="",  
                        numeric supervisorId=0,  
                        numeric statusId=0,  
                        string orderBy="cribNumber ASC") {  

    local.cribNumberValue = arguments.cribNumber?arguments.cribNumber:"";  
    local.siteIdValue = arguments.siteId?arguments.siteId:"";  
    local.superIdValue = arguments.supervisorId ? arguments.supervisorId:"";  
    local.statusIdValue = arguments.statusId ? arguments.statusId:"";  

    spService = new storedproc();   
    spService.setDatasource(variables.dsn);  
    spService.setUsername(variables.userName);  
    spService.setPassword(variables.password);   
    spService.setProcedure("usp_readCrib");   

    spService.addParam(dbvarname="@cribIdList",cfsqltype="cf_sql_varchar"
        ,type="in",value=arguments.cribIdList
        ,null=!len(arguments.cribIdList));  
    spService.addParam(dbvarname="@cribNumber",cfsqltype="cf_sql_integer"
         ,type="in",value=local.cribNumberValue
         ,null=!arguments.cribNumber);   
    spService.addParam(dbvarname="@isAnnex",cfsqltype="cf_sql_varchar"
        ,type="in",value=arguments.isAnnex,null=!len(arguments.isAnnex));  
    spService.addParam(dbvarname="@siteId",cfsqltype="cf_sql_integer"
         ,type="in",value=local.siteIdValue,null=!arguments.siteId);  
    spService.addParam(dbvarname="@parentCribIdList" 
         , cfsqltype="cf_sql_varchar", type="in"
         , value=arguments.parentCribIdList
         , null=!len(arguments.parentCribIdList));  
    spService.addParam(dbvarname="@supervisorId", 
         cfsqltype="cf_sql_integer", type="in",value=local.superIdValue
         , null=!arguments.supervisorId);  
    spService.addParam(dbvarname="@statusId"
         , cfsqltype="cf_sql_integer", type="in"
         , value=local.statusIdValue, null=!arguments.statusId);        
    spService.addParam(dbvarname="@orderBy",cfsqltype="cf_sql_varchar"
         , type="in",value=arguments.orderBy);  
    spService.addProcResult(name="rs1",resultset=1);  

    local.result = spService.execute();  

    return local.result.getProcResultSets().rs1;   
}  
下面是存储过程中的参数列表:

 @groupId1  int = NULL        
,@groupId2  int = NULL
@cribIdList         varchar(500) = NULL  
,@cribNumber        int = NULL  
,@isAnnex           varchar(3) = NULL  
,@siteId            int = NULL  
,@parentCribIdList  varchar(500) = NULL  
,@supervisorId      int = NULL  
,@statusId          int = NULL  
,@orderBy           varchar(50)  
以下是服务器返回的消息:

[Macromedia][SQLServer JDBC驱动程序][SQLServer]过程或函数 usp_readCrib指定的参数太多

对于这两种错误,它们似乎都发生在以下路径:

Error Details - struct
COLUMN      0
ID          CFSTOREDPROC
LINE        489
RAW_TRACE   at cfbase2ecfc235349229$funcINVOKETAG.runFunction(E:\ColdFusion2016\cfusion\CustomTags\com\adobe\coldfusion\base.cfc:489)
TEMPLATE    E:    \ColdFusion2016\cfusion\CustomTags\com\adobe\coldfusion\base.cfc
TYPE    CFML````

ColdFusion 10及更高版本将请求中的参数数量默认限制为100。幸运的是,可以对其进行更新和更改,以反映存储过程所需的参数数量


ColdFusion 10及更高版本将请求中的参数数量默认限制为100。幸运的是,可以对其进行更新和更改,以反映存储过程所需的参数数量


从哪个版本升级?很难说没有看到任何代码。如果s.O.的代码太长,你能把一个小的演示过程和代码放在一起,或者在gist上发布一个代码示例吗。?在不知道更多的情况下,我会说我们在从10月升级到2016年时遇到了遗留应用程序的问题。我们不知道,遗留代码有一些错误的@dbvarname变量。这在CF10中不是问题,因为该参数被忽略。随着CF11的出现,Adobe重新恢复了
dbvarname
,代码开始抛出各种错误,直到我们更正了参数名。。。这是一个愚蠢的问题,但您是否100%确定所有参数都匹配,您调用了正确的存储过程并访问了正确的数据库?询问的原因是这些看起来像SQL Server错误消息。如果拼写错误或提供的参数太多,EXEC也会出现同样的错误:
EXEC myProc@ErrorParamName=123
在第一个过程中,参数名称不匹配。CF代码使用
@group1Id
(“1”在中间)-但过程使用“@groupId1”(“1”在末尾)。第二个过程在CF2016和2018下运行良好。你确定这些是参数吗?从哪个版本升级?很难说没有看到任何代码。如果s.O.的代码太长,你能把一个小的演示过程和代码放在一起,或者在gist上发布一个代码示例吗。?在不知道更多的情况下,我会说我们在从10月升级到2016年时遇到了遗留应用程序的问题。我们不知道,遗留代码有一些错误的@dbvarname变量。这在CF10中不是问题,因为该参数被忽略。随着CF11的出现,Adobe重新恢复了
dbvarname
,代码开始抛出各种错误,直到我们更正了参数名。。。这是一个愚蠢的问题,但您是否100%确定所有参数都匹配,您调用了正确的存储过程并访问了正确的数据库?询问的原因是这些看起来像SQL Server错误消息。如果拼写错误或提供的参数太多,EXEC也会出现同样的错误:
EXEC myProc@ErrorParamName=123
在第一个过程中,参数名称不匹配。CF代码使用
@group1Id
(“1”在中间)-但过程使用“@groupId1”(“1”在末尾)。第二个过程在CF2016和2018下运行良好。你确定这些是参数吗?与邮政不同parameters@Ageax他注意到调用是在CF脚本中进行的,该脚本可能封装在一个函数中,该函数可以从CFM的post调用。这就是为什么我把这个扔了出去。是的,这是一个很好的猜测,但是POST限制是在目标脚本执行之前应用的。如果发现太多参数,则在执行任何CFML代码之前,请求将被中止。由于错误显然是由CFML代码引起的,这意味着请求通过了POST过滤器,问题是另外的。与邮政不同parameters@Ageax他注意到调用是在CF脚本中进行的,该脚本可能封装在一个函数中,该函数可以从CFM的post调用。这就是为什么我把这个扔了出去。是的,这是一个很好的猜测,但是POST限制是在目标脚本执行之前应用的。如果发现太多参数,则在执行任何CFML代码之前,请求将被中止。由于错误显然是由CFML代码引起的,这意味着请求通过了POST过滤器,问题是另外的。