2011-12-27 7 views
1

次のようなエラーが返されます。 "キーワード 'VIEW'の近くに構文が正しくありません。私は、このインスタンスの参照をオンラインで見つけようとしました。私が解決策を見落とした場合、または誰かが何か提案があれば、私はそれを高く評価します。ビューの作成中にcfqueryで奇妙なエラーが発生しました

問合せ:

<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> 

このクエリの省略形があるが、それはあなたが始められると、基本的なレイアウトを示すべきです。事前に

おかげで、

JP

+0

'arguments.bulkRow.request_by'変数の値は何ですか? –

+0

cfqueryの呼び出しの直前に、#arguments.bulkRow.request_by#変数をcfdumpします。私はそれがあなたのビューの動的な名前を形成するのに役立つ文字列であると期待している気がしますが、それはSQLエラーを引き起こす(つまり、CREATE VIEWというフレーズit_uploader_features_viewのスペース) –

+0

@JustinScott - これはuser_idです。たとえば、 "i_jimp"と言うことができます。 – JimP

答えて

7

私は自分のSQL Serverに対していくつかのテストを実行し、ビューを作成するときにパラメータ化クエリが問題を引き起こすことが表示されます。 CFQUERYPARAMタグを削除すると問題が解決されます。標準SELECT文でCFQUERYPARAMを使用することがベストプラクティスですが、この場合、ビューにアクセスするたびに実行されるSQLを渡しているため、パラメータ化をビューに渡すことはできません。

ここでは、同じ概念を使用した例がいくつかありますが、自分のデータベースの1つのテーブルです。

以下は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> 

次は正常に動作します:

<cfset id="y" /> 
<cfquery> 
    create view #id#_view as 
    select * from AdminUser 
    where admID = '#id#' 
</cfquery> 

誰もがこれを詳細に説明するSQL Serverの参照を見つけることができている場合は、編集して自由に感じますこの答えにはリンクがあります。

また、IDの値によっては、ブラケットでビュー名をラップすることも考えられます。 IDが数字で始まる場合、ステートメントはそのままでは括弧で囲まれたステートメントに置かれますが、これらの状況をカバーします(ビューを照会するときには必ず表記法を使用してください)。例:create view [#id#_view]

+0

ありがとうジャスティン!それは魅力のように働いた。 – JimP

関連する問題