一个完美的作品(通知转换):
select (select Twr_Kod from whm.CDN.TwrKarty where Twr_GIDNumer=Convert(int, value))
from Workflow.ControlValues
inner join Workflow.Controls on Controls.ID=ControlID and Controls.ValueTypeID=1
但是,如果在转换值时导致错误,我将使其成为子查询:
select
(select (select Twr_Kod from whm.CDN.TwrKarty where Twr_GIDNumer=Convert(int, value))
from Workflow.ControlValues
inner join Workflow.Controls on Controls.ID=ControlID and Controls.ValueTypeID=1
where ItemID=Items.ID
for XML path(''))
from Offers.Items
我认为where
会排除某些行,因此不会导致转换出现任何问题。你知道这种行为的原因是什么以及如何防止它?
P.S。我检查了错误消息中的行,但它与Controls.ValueTypeID=1
子句中的on
不匹配。
答案 0 :(得分:1)
使用TRY_CONVERT
:
SELECT (
SELECT (
SELECT Twr_Kod
FROM whm.CDN.TwrKarty
WHERE TRY_CONVERT(INT, Twr_GIDNumer) = TRY_Convert(INT, value)
)
FROM Workflow.ControlValues
INNER JOIN Workflow.Controls ON Controls.ID = ControlID
AND Controls.ValueTypeID = 1
WHERE ItemID = Items.ID
FOR XML path('')
)
FROM Offers.Items;
基于WHERE
的排除取决于执行计划。如果查询优化器首先决定执行WHERE Twr_GIDNumer = Convert(INT, value)
,那么您将收到错误。