Sql 从子查询中选择条件引发错误的位置

Sql 从子查询中选择条件引发错误的位置,sql,Sql,我有下面的查询,我从另一个带有where条件的子查询中进行选择 if not exists (select @DocTaxID from (select bundlechecklist.Bundle_TXN_ID, documentchecklist.Doc_Checklist_TXN_ID, documentchecklist.Doc_Type_Name from ecm.bundle_checklist_txn bundlechecklist le

我有下面的查询,我从另一个带有where条件的子查询中进行选择

if not exists
 (select @DocTaxID from (select  bundlechecklist.Bundle_TXN_ID, documentchecklist.Doc_Checklist_TXN_ID, documentchecklist.Doc_Type_Name from ecm.bundle_checklist_txn bundlechecklist
                    left outer join [ECM].[Document_Checklist_TXN] documentchecklist on documentchecklist.Bundle_TXN_ID = bundlechecklist.Bundle_TXN_ID
                    where bundlechecklist.originating_tran_id = "AMD" 
                    and bundle_name = 'Line') 
                    where @DocTaxID is not null )

    begin
         insert into [ECM].[Document_Checklist_TXN]
            (bundle_txn_id, document_action_rule_id, action_rule_name, doc_type_name, cp_document_name, document_id, doc_status_code)
         values
            (1, 17, 'A', 'DEv', 'Dec', 12, 'Pend')

    end
DocTaxID是整型字段。
我得到的错误是“关键字“where”附近的语法不正确。”

您需要一个表别名:

select @DocTaxID
from (select bundlechecklist.Bundle_TXN_ID, documentchecklist.Doc_Checklist_TXN_ID, documentchecklist.Doc_Type_Name
      from ecm.bundle_checklist_txn bundlechecklist left outer join
           [ECM].[Document_Checklist_TXN] documentchecklist
           on documentchecklist.Bundle_TXN_ID = bundlechecklist.Bundle_TXN_ID
      where bundlechecklist.originating_tran_id = 'AMD' and bundle_name = 'Line'
     ) d
-------^
where @DocTaxID is not null ;

不知何故,我认为有一种更简单的方式来表达这种逻辑,但现在还不清楚它到底在做什么。

您需要一个表别名:

select @DocTaxID
from (select bundlechecklist.Bundle_TXN_ID, documentchecklist.Doc_Checklist_TXN_ID, documentchecklist.Doc_Type_Name
      from ecm.bundle_checklist_txn bundlechecklist left outer join
           [ECM].[Document_Checklist_TXN] documentchecklist
           on documentchecklist.Bundle_TXN_ID = bundlechecklist.Bundle_TXN_ID
      where bundlechecklist.originating_tran_id = 'AMD' and bundle_name = 'Line'
     ) d
-------^
where @DocTaxID is not null ;

不知何故,我认为有一种更简单的方法来表达这种逻辑,但现在还不清楚它到底在做什么。

出现错误的原因是因为没有给子查询添加别名:
。。。并将_name“Line”)绑定为Where@DocTaxId…
但是,您的查询实际上没有任何意义。整个子查询被
忽略,其中@DocTaxID不为NULL
段。更不用说,这两个变量在代码段的其他地方都没有使用。你能解释一下你想对这个查询做什么吗?用你正在使用的数据库标记你的问题,这个数据库大概是SQL Server。是的,它是SQL Server。抱歉,BundleCheckList.originating_tran_id='AMD'+为子选择提供别名出现错误的原因是您没有给子查询添加别名:
。。。并将_name“Line”)绑定为Where@DocTaxId…
但是,您的查询实际上没有任何意义。整个子查询被
忽略,其中@DocTaxID不为NULL
段。更不用说,这两个变量在代码段的其他地方都没有使用。你能解释一下你想对这个查询做什么吗?用你正在使用的数据库标记你的问题,这个数据库大概是SQL Server。是的,它是SQL Server。抱歉,BundleCheckList.originating_tran_id='AMD'+为您的子选择提供一个别名