Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/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 10错误_Sql Server_Stored Procedures_Coldfusion_Sql Server 2012_Coldfusion 10 - Fatal编程技术网

Sql server 存储过程的ColdFusion 10错误

Sql server 存储过程的ColdFusion 10错误,sql-server,stored-procedures,coldfusion,sql-server-2012,coldfusion-10,Sql Server,Stored Procedures,Coldfusion,Sql Server 2012,Coldfusion 10,在.CFC文件中,在CFfunction内,使用CFargument标记 <cfscript> var sp=new storedproc(); sp.setDatasource(variables.datasource); sp.setProcedure("storedProcedure_INSERT"); sp.addParam(cfsqltype="cf_sql_integer",type="in",val

在.CFC文件中,在CFfunction内,使用CFargument标记

    <cfscript>
        var sp=new storedproc();
        sp.setDatasource(variables.datasource);
        sp.setProcedure("storedProcedure_INSERT");
        sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.one);
        sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.two);
        sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.three);
        sp.addParam(cfsqltype="cf_sql_integer",type="in",value=arguments.four);
        sp.addProcResult(name="results",resultset=1);
        //writeDump(sp);break;  //This dump is reached
        var spObj=sp.execute(); //blows up here; this is never reached
        writeDump(spObj);break; //This is never reached, either.
        var spResults=spObj.getProcResultSets().results;
我曾经多次使用过这个psuedo代码,在过去的5个月里,从来没有让它这么做过。我已连接到MSSQL Server 2012 DB,CF Admin中的一切都正常,其他SP工作正常。堆栈跟踪甚至根本不包括我的任何代码

错误出现在C:/ColdFusion10/cfusion/CustomTags/com/adobe/coldfusion/base.cfc:第491行 从C:/ColdFusion10/cfusion/CustomTags/com/adobe/coldfusion/storedproc.cfc调用:第142行 从//总部devfs/development$/websites/myProject/cfc/mysoapwsdl.cfc调用:第123行


如果我再尝试粘贴这些东西,就会爆炸。Google…没有什么帮助。

简短回答:该错误表示您正在尝试从存储过程中检索结果集,而实际上它并没有返回结果集。一个简单的解决方案是在过程的末尾添加一个
SELECT
,这样它将返回一个包含所需数据的结果集。然后,您的原始代码将正常工作:

   SELECT @@ROWCOUNT AS NumOfRowsAffected;
更长的回答: 您正在使用的方法,
addProclesult()
,相当于。它旨在捕获从存储过程返回的数据。(由于CF对属性名称的选择不当,许多人认为“resultset”意味着storedproc“result”结构,但它们是两个完全不同的东西)。用CF的说法,“resultset”是一个查询对象

虽然所有四(4)条主sql语句都返回一些结果,但并非所有语句都返回“查询对象”

  • 只有
    SELECT
    语句才能生成“查询对象”
  • INSERT/UPDATE/DELETE
    语句只返回受影响的行数。它们不生成“查询对象”
由于存储过程执行
插入操作
,因此它不会生成“查询对象”。因此,尝试在此处获取不存在的查询时会出现错误:

  sp.addProcResult(name="results",resultset=1);
简单的解决方案是在存储过程的末尾添加一个
SELECT
语句,这样它就返回了一个查询对象。然后代码就可以按预期工作了



顺便说一句,我怀疑您实际上试图获取“result”结构,但使用了错误的方法。尽管这在这里无论如何都不起作用。根据,它不包含受影响的行数。可能是因为存储过程可以执行多个语句,每个语句都可能返回一个行计数,因此不只是返回一个值。

简短回答:此错误表示您正在尝试重试从存储过程中删除一个结果集,而实际上它并没有返回结果集。一个简单的解决方案是在过程末尾添加一个
SELECT
,这样它将返回一个包含所需数据的结果集。然后,您的原始代码将起作用:

   SELECT @@ROWCOUNT AS NumOfRowsAffected;
更长的回答: 您正在使用的方法,
addProclesult()
,相当于。它旨在捕获从存储过程返回的数据。(由于CF的属性名称选择不当,许多人认为“resultset”意味着storedproc“result”结构,但它们是两个完全不同的东西。)“resultset”是一个查询对象,用CF的说法

虽然所有四(4)条主sql语句都返回一些结果,但并非所有语句都返回“查询对象”

  • 只有
    SELECT
    语句才能生成“查询对象”
  • INSERT/UPDATE/DELETE
    语句只返回受影响的行数。它们不生成“查询对象”
由于存储过程执行插入操作,因此它不会生成“查询对象”。因此,尝试在此处获取不存在的查询时会出现错误:

  sp.addProcResult(name="results",resultset=1);
简单的解决方案是在存储过程的末尾添加一个
SELECT
语句,以便它返回一个查询对象。然后您的代码将按预期工作



顺便说一句,我怀疑您实际上是在试图获取“结果”结构,但使用了错误的方法。
的等价物是
getPrefix()
。尽管这在这里无论如何都行不通。根据,它不包含受影响的行数。可能是因为存储过程可以执行多个语句,每个语句都可能返回一个行计数,所以不只是返回一个值

存储过程是否从SSMS执行?如果是这样,它是否使用和关联的标记运行?愚蠢的问题,但给定过程的名称-它是否实际返回resultset ie查询对象?return不会生成“查询”ie resultset。只有SELECT语句可以执行此操作。听起来你要找的东西相当于
,我相信应该是
spObj.getPrefix()
。但是,我不知道标记或cfscript版本是否包含“受影响的行数”。可能不会,因为存储过程可以执行多个语句,每个语句都可能生成一个计数。因此我怀疑“结果”或“前缀”中没有包含键。@Janet-将
返回
更改为
选择@ROWCOUNT作为numrowsimpacted
,您的原始代码将正常工作。很好!我将写一个更完整的解释作为回答。主要是因为a)注释是临时的,可以删除;b)我认为理解它为什么不能与insert一起工作可能会对未来的读者有所帮助。存储过程是否从ssm执行?如果是这样,它是否使用和关联的标记运行?愚蠢的问题,但给定过程的名称-它是否实际返回resultset ie查询对象?return不会生成“查询”ie resultset。只有SELECT语句可以执行此操作。听起来你要找的东西相当于
,我相信应该是
spObj.getPrefix()
。但是,我不知道标签或cfscript版本是否包含“numb”