【问题标题】:SQL statement not working when placed in ColdFusion CFC放置在 ColdFusion CFC 中时 SQL 语句不起作用
【发布时间】:2012-08-29 14:22:25
【问题描述】:

我有一个在 Microsoft SQL Server 中运行良好并返回预期结果的表连接。

SELECT     d.id1, c.content_type
FROM       Document2 AS d INNER JOIN
           Content2 AS c ON d.content_id = c.content_id
WHERE     (d.class_id = 1)

但是,当我将语句放入 ColdFusion CFC 时,该语句将不会执行,并且我没有得到任何返回。 CFC 文件中的语法是否更改? Microsoft SQL 语法与 ColdFusion CFC 语法不同吗?还是我在这里错过了其他东西?

这是相关功能。如果我使用不是表连接的简单 SQL 语句,我可以让这段代码工作。但是,当我插入表连接语句时,什么都不会返回。

  remote array function getcontent() {
    var q = new com.adobe.coldfusion.query();
     q.addParam( name="searchParam", value="#searchName#" );
    q.setDatasource("Document");
    q.setSQL("SELECT d.id1, c.content_type FROM Document2 
    AS d INNER JOIN   
    Content2 AS c ON d.content_id = c.content_id WHERE (d.class_id = 1)");

    var data = q.execute().getResult();
    var result = [];
    for(var i=1; i<= data.recordCount; i++) {
        arrayAppend(result, {"id"=data.d.id1[i], "Type"=data.c.content_type[i]});
    }
    return result;
}

【问题讨论】:

  • 您是否尝试过简单地转储“数据”以查看查询是否包含任何记录?
  • “Microsoft SQL 语法与 Coldfusion cfc 语法不同吗?” - 没有“coldfusion cfc 语法”。 ColdFusion 将您提供的 SQL 传递给数据库。确保您的数据源指向的数据库与您的 MSQL Studio 指向的数据库相同。
  • 实际上,“data.d.id1”是怎么回事 - 那将是不起作用的 - 请参阅下面的答案以了解详细信息...

标签: sql sql-server database coldfusion cfc


【解决方案1】:

问题出在这行代码:

arrayAppend(result, {"id"=data.d.id1[i], "Type"=data.c.content_type[i]});


您不会像那样引用数据库变量 - 表别名不是列别名的一部分。

你应该简单地使用:

data.id1[i]


如果您确实在列别名中有 .,那么您需要使用括号表示法来引用它,如下所示:

data['d.id1'][i]

但同样,表别名不是列别名的一部分,因此不需要。

【讨论】:

  • 你是对的,这就是问题所在。它现在完美无缺。感谢您的帮助!
  • @stat8:如果此答案为您解决了问题,请不要忘记“接受”它,以便它作为未来读者的路标。另见:Accepting Answers. How does it work?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多