我有以下查询返回错误:“关键字'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>
这是查询的缩写形式,但它应该让您开始并显示基本布局。
提前致谢,
JP
答案 0 :(得分: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>
以下工作正常:
<cfset id="y" />
<cfquery>
create view #id#_view as
select * from AdminUser
where admID = '#id#'
</cfquery>
如果有人能够找到详细解释此内容的SQL Server参考,请随时使用链接编辑此答案。
我还要注意,根据ID的值,您可以考虑用括号包装视图名称。如果ID以数字开头,则语句将按原样失败,但将其放入括号中的语句将涵盖这些情况(只需确保在查询视图时也使用括号表示法)。示例:create view [#id#_view]