見出しの質問に答えるには: いいえ、これは CFScript のバグではありません。あなたが示していることは、CFScript とはまったく関係ありません。
ただし、あなたが尋ねようとしている質問に答えるには:はい、Query.cfc にバグが見つかりました。
以下は、バグを示すコードです (そして、バグが CFScript とは何の関係もなく、すべてが Query.cfc と関係があることを示しています)。
このコードは正常に動作します:
<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
SELECT '''' + email + '''' as email
FROM users
WHERE firstName = '#firstName#'
")>
<cfset emailAddresses = query.execute().getResult()>
<cfdump var="#emailAddresses#">
フィルター値を SQL 文字列にハードコーディングしたことに注意してください。うん。
このコードのエラー:
<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
SELECT '''' + email + '''' as email
FROM users
WHERE firstName = :firstname
")>
<cfset query.addParam(name="firstname", value=firstName, cfsqltype="CF_SQL_VARCHAR")>
<cfset emailAddresses = query.execute().getResult()>
<cfdump var="#emailAddresses#">
私にとってのエラーは次のとおりです。
[Macromedia][SQLServer JDBC Driver][SQLServer]An object or column name is missing or empty.
For SELECT INTO statements, verify each column has a name. For other statements,
look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.
参考までに、CF が DB に渡した SQL は次のとおりです。
SELECT '' '' + email + '' '' as email FROM users WHERE firstName = (param 1)
ColdFusion が一重引用符を誤って処理したことが原因であることを証明するには、次のようにします。
<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
SELECT email as email
FROM users
WHERE firstName = :firstname
")>
<cfset query.addParam(name="firstname", value=firstName, cfsqltype="CF_SQL_VARCHAR")>
<cfset emailAddresses = query.execute().getResult()>
<cfdump var="#emailAddresses#">
だから、私があなただったら、これについてバグを提起します。注: CF9.0.2 と CF10.0.7 で同じです。
しかし、同じように... もし私があなただったら、とにかくそこにそれらの引用符を入れません. よほどの理由がない限り、データ処理を行っているときではなく、表示を行っているときに挿入してください。私はそれらが表示目的のためにそこにあると思いますか?