2011-12-27 25 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」變量的值是什麼? – 2011-12-27 18:51:29

+0

就在cfquery調用之前,cfdump out#arguments.bulkRow.request_by#變量。我有一種感覺,你期待它是一個字符串,這將有助於形成你的視圖的動態名稱 - 但它是完全別的東西,導致SQL錯誤(即它最終成爲像CREATE VIEW一樣的短語it_uploader_features_view中的空格) – 2011-12-27 18:51:52

+0

@JustinScott - 它是user_id ..例如,你可以說「i_jimp」。 – JimP 2011-12-27 18:52:24

回答

7

我撞上了我自己的SQL Server的一些測試,它似乎是參數化查詢創建視圖時產生問題。刪除CFQUERYPARAM標記應該糾正問題。使用帶有標準select語句的CFQUERYPARAM是一種最佳實踐,但在這種情況下,您傳遞的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> 

下正常工作:

<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 2011-12-27 20:00:34