我正在编写SQL Server Merge
语句,但是似乎语法不正确。有人可以看看我要去哪里了吗?
您能给予的任何帮助都是最感激的。
我有两个要合并的表(w_materialmarketprices2
和d_component
)。我的源(d_component
)表要求我联接一个税表(d_tax
)。
一切正常,除了当我尝试将其他税表添加到我的联接中时。我需要税表的原因是,它包含d_component
表中没有的税率(尽管我有相应的税码)。
我在w_materialmarketprices2
和d_component
之间的比较标准包括计算中的税率。
这是我的代码:
MERGE [DWH].[dbo].[w_materialmarketprices2] AS A
USING
(SELECT
[comp_code], [comp_desc], [comp_o_un], [comp_type],
[comp_ccy], [comp_tx], [comp_net_price], [comp_per],
[comp_doc_date], [comp_last_update], [comp_latest],
D.[tax_rate] AS TaxRate
FROM
[DWH].[dbo].[d_component]) AS B
INNER JOIN
[DWH].[dbo].[d_tax] AS D ON D.[tax_code] = B.[comp_tx]
ON
A.[mp_comp_code] = B.[comp_code] AND A.[mp_valid_date] = B.[comp_doc_date] AND B.[comp_net_price]>0 AND A.[mp_price_inc_vat] = ROUND(((B.[comp_net_price]/B.[comp_per])*(1+TaxRate),3) AND A.[mp_budget_actual] = 'PO Actual' AND B.[comp_type] ='P100' AND (left(B.[comp_code],1)='S' OR left(B.[comp_code],1)='R')
WHEN NOT MATCHED BY TARGET
THEN
INSERT ([mp_budget_actual], [mp_comp_code], [mp_comp_desc], [mp_unit], [mp_unit_qty], [mp_qualified_supplier], [mp_ccy], [mp_price_inc_vat], [mp_valid_date], [mp_last_update], [mp_latest])
VALUES ('PO Actual', B.[comp_code], B.[comp_desc], B.[comp_o_un], 1, 'Y', B.[comp_ccy], ROUND(((B.[comp_net_price]/B.[comp_per])*(1+TaxRate),3), B.[comp_doc_date], B.[comp_last_update], B.[comp_latest])
;
我得到的错误是:
消息4145,第15级,状态1,第20行
在需要条件的上下文中在“,”附近指定的非布尔类型的表达式。第15层状态1的23行的消息102
'B'附近的语法不正确。
,D.[tax_rate] AS TaxRate
以红色下划线显示,因此我认为问题与这有关。我也收到消息
无法绑定多部分标识符“ D.tax_rate”
非常感谢您的帮助。香港人。
答案 0 :(得分:0)
没有理由在USING
子句中使用子查询,即:不要在其中放置SELECT
:
MERGE [DWH].[dbo].[w_materialmarketprices2] AS A
USING
[DWH].[dbo].[d_component] AS B
INNER JOIN [DWH].[dbo].[d_tax] AS D ON D.[tax_code] = B.[comp_tx]
ON
A.[mp_comp_code] = B.[comp_code] .......