创建视图时cfquery出现奇怪错误

Jim*_*imP 1 sql coldfusion coldfusion-9

我有以下查询返回错误:"关键字'VIEW'附近的语法不正确." 我试图在网上和SO中找到这个实例的任何参考.如果我忽略了一个解决方案,或者如果有人有任何建议我会非常感激.

查询:

    <cfquery datasource="#mydatasource#">
    CREATE VIEW #arguments.bulkRow.request_by#_uploader_features_view
    (
        feature_products_id
        , feature_text
        , feature_priority
    )
    AS
    SELECT
        a1.tbl_products__products_id AS feature_products_id,
        a1.tbl_productfeature__feature_text__1 AS feature_text,
        1 AS feature_priority
    FROM bulk_product_upload a1
    WHERE processed = 0
        AND request_by = <cfqueryparam value="#arguments.bulkRow.request_by#" cfsqltype="cf_sql_varchar">
        AND LEN( a1.tbl_productfeature__feature_text__1 ) > 1

    UNION

    SELECT
        a1.tbl_products__products_id AS feature_products_id,
        a1.tbl_productfeature__feature_text__2 AS feature_text,
        2 AS feature_priority
    FROM bulk_product_upload a1
    WHERE processed = 0
        AND request_by = <cfqueryparam value="#arguments.bulkRow.request_by#" cfsqltype="cf_sql_varchar">
        AND LEN(a1.tbl_productfeature__feature_text__2) > 1   

    ...

    UNION

    SELECT
        a1.tbl_products__products_id AS feature_products_id,
        a1.tbl_productfeature__feature_text__20 AS feature_text,
        2 AS feature_priority
    FROM bulk_product_upload a1
    WHERE processed = 0
        AND request_by = <cfqueryparam value="#arguments.bulkRow.request_by#" cfsqltype="cf_sql_varchar">
        AND LEN(a1.tbl_productfeature__feature_text__20) > 1
</cfquery>
Run Code Online (Sandbox Code Playgroud)

这是查询的缩写形式,但它应该让您开始并显示基本布局.

提前致谢,

J.P

Jus*_*ott 7

我针对自己的SQL Server运行了一些测试,看来参数化查询在创建视图时会出现问题.删除CFQUERYPARAM标记应该可以解决问题.将CFQUERYPARAM与标准select语句一起使用是最佳实践,但在这种情况下,您将传入将在每次访问视图时执行的SQL,因此参数化无法传递到视图中.

以下是使用相同概念的几个示例,但是来自我自己的一个数据库的表.

以下产生Incorrect syntax near the keyword 'view'错误:

<cfset id="x" />
<cfquery>
    create view #id#_view as
    select * from AdminUser
    where admID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#id#" />
</cfquery>
Run Code Online (Sandbox Code Playgroud)

以下工作正常:

<cfset id="y" />
<cfquery>
    create view #id#_view as
    select * from AdminUser
    where admID = '#id#'
</cfquery>
Run Code Online (Sandbox Code Playgroud)

如果有人能够找到详细解释这一点的SQL Server参考,请随时使用链接编辑此答案.

我还要注意,根据ID的值,您可以考虑用括号包装视图名称.如果ID以数字开头,则语句将按原样失败,但将其放入括号中的语句将涵盖这些情况(只需确保在查询视图时也使用括号表示法).例:create view [#id#_view]