首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server错误“80040e14”歧义列名

Server错误“80040e14”歧义列名
EN

Stack Overflow用户
提问于 2009-07-22 09:29:13
回答 5查看 6.3K关注 0票数 0

我有一个要搜索要编辑的产品的管理页面,但是该页面一直返回错误:

Microsoft OLE DB Provider for SQL Server错误'80040e14‘不明确的列名'prod_id’。/_admin/searchProducts.asp,第89行

我不知道为什么会出现此错误,因为页面和站点是另一个网站和相关MSSQL数据库的直接副本,搜索产品页在该站点上工作。

这是有问题的代码(不确定这里是否容易阅读);

代码语言:javascript
运行
复制
if request("fldSubmitted") <> "" then 
if request("fldprodid") <> "" and isNumeric(request("fldprodid")) then
    SQL = "select * from products where prod_id = " & cdbl(request("fldprodid"))
else
    SQL = "select "
    if request("showtop") <> "all" then
        SQL = SQL & " top " & request("showtop") & " " & replace(replace(request("orderby")," asc","")," desc","") & ", "
    end if
    SQL = SQL & "prod_name, prod_id, prod_code, prod_icon, prod_thumb, prod_numViews, prod_archived"
    if request("fldLabel") <> "" then SQL = SQl & ", label_name"
    if request("fldCat") <> "" then SQL = SQL & ", cat_name"
    if request("fldSubcat") <> "" then SQL = SQL & ", subcat_name"
    SQL = SQL & " from products"
    if request("fldLabel") <> "" then SQL = SQL & ", labels"
    if request("fldCat") <> "" then SQL = SQL & ", categories"
    if request("fldSubcat") <> "" then SQL = SQl & ", subcategories"
    sql = sql & " where 1=1"
    if request("fldLabel")<> "" then SQL = SQL & "and prod_label = label_id "
    if request("fldCat") <> "" then SQL = SQL & "and prod_category = cat_id "
    if request("fldSubcat") <> "" then SQL = SQL & "and prod_subcategory = subcat_id "
    if request("fldName") <> "" then SQL = SQL & " and (prod_name like '%" & replace(request("fldName"),"'","''") & "%')"
    if request("fldCode") <> "" then SQL = SQL & " and (prod_code like '%" & replace(request("fldCode"),"'","''") & "%')"
    if request("fldLabel") <> "" then SQL = SQL & " and prod_label = " & request("fldLabel")
    if request("fldCat") <> "" then SQL = SQL & " and prod_category = " & request("fldCat")
    if request("fldSubcat") <> "" then SQL = SQL & " and prod_subcategory = " & request("fldSubcat")
    if request("fldArchived") = "No" then 
        SQL = SQL & " and prod_archived = 0"
        if request("instock") = "No" then SQL = SQL & " and prod_numleft > 0"
    end if

    SQL = SQL & " order by " & request("orderby")
end if
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-22 09:41:21

在查询的后半部分,您可以从表产品、标签、类别和子类别中选择。如果这些表中有一个prod_id,那么DBMS将不知道您所指的是哪个表。一个简单的修订是对每个表进行别名,例如产品p、标签l等。

一个更好的重构方法是将查询更改为我们联接:

代码语言:javascript
运行
复制
SELECT p.prod_name, l.label_name
FROM products p
JOIN labels l
    ON l.label_id = p.label_id
WHERE p.in_stock > 0

处理这些问题时的另一个技巧是将response.write字符串复制到Management中,这将帮助您看到将字符串操作传递给错误。

最后,我建议查看存储过程,这样您就可以从应用程序中删除SQL。

编辑

在评论中的一些聊天之后,如果存储过程是不可能的,那么参数化查询将是一个很好的进步。这将带来性能提高,因为查询计划将被缓存,并避免了最基本形式的SQL注入攻击。

票数 3
EN

Stack Overflow用户

发布于 2009-07-22 09:36:40

问题是查询将选择列prod_id,但引用的多个表中有一个具有该名称的列。

查询返回多个表的结果,但确切地说,哪个表取决于各种参数的值。所以,这也许可以解释为什么它在一种情况下工作,而不是在另一种情况下工作。

通过在prod_id引用前面加上表名,可以使它明确无误。

代码语言:javascript
运行
复制
myTable.prod_id

我认为(对您来说)哪个表是正确的(当然,它必须是查询的一部分,而不是在特定条件下存在的表),这是相当明显的。

票数 5
EN

Stack Overflow用户

发布于 2009-07-22 09:35:30

您确定在查询中使用的表列表中只有一个列名为prod_id的表吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1164108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档