SQL Server Case 语句在 Delphi TADODataSet 中不起作用
SQL Server Case statement does not work in Delphi TADODataSet
在 Delphi XE5 中,我使用 TADODataSet
并将它的 CommandText
设置为此命令 (with CASE
) :
SELECT
Master.*,
CASE
( SELECT TOP (1) personeli_State
FROM Detail
WHERE Detail.FK_Key = Master.pk_key
AND Detail.personeli_State = 'Test'
AND Detail.sended = 0 )
WHEN 'Test' THEN 'Test exist'
ELSE ''
END AS PersonState
FROM
Master
LEFT OUTER JOIN
ExtraInfo ON ExtraInfo.p_key = Master.fk_ExtraInfo
WHERE
(fk_key=:Fk)
并且记录集为空但没有CASE
声明记录集有数据。
(我不能使用计算列或 SQL 服务器视图,因为我使用了动态查询)
将 CASE 语句中的 Select 部分更改为以下内容:
CASE
( SELECT TOP (1) personeli_State
FROM Detail
WHERE Detail.personeli_State = 'Test'
AND Detail.sended = 0
AND Detail.FK_Key = Master.pk_key )
在我看来,ADO似乎改变了执行计划的优先级...!
在 Delphi XE5 中,我使用 TADODataSet
并将它的 CommandText
设置为此命令 (with CASE
) :
SELECT
Master.*,
CASE
( SELECT TOP (1) personeli_State
FROM Detail
WHERE Detail.FK_Key = Master.pk_key
AND Detail.personeli_State = 'Test'
AND Detail.sended = 0 )
WHEN 'Test' THEN 'Test exist'
ELSE ''
END AS PersonState
FROM
Master
LEFT OUTER JOIN
ExtraInfo ON ExtraInfo.p_key = Master.fk_ExtraInfo
WHERE
(fk_key=:Fk)
并且记录集为空但没有CASE
声明记录集有数据。
(我不能使用计算列或 SQL 服务器视图,因为我使用了动态查询)
将 CASE 语句中的 Select 部分更改为以下内容:
CASE
( SELECT TOP (1) personeli_State
FROM Detail
WHERE Detail.personeli_State = 'Test'
AND Detail.sended = 0
AND Detail.FK_Key = Master.pk_key )
在我看来,ADO似乎改变了执行计划的优先级...!