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
我针对自己的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]