【发布时间】:2015-08-24 09:37:07
【问题描述】:
在 Delphi XE5 中,我使用 TADODataSet 并将其设置为 CommandText 到此命令 (使用 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 Server 视图,因为我使用了动态查询)
【问题讨论】:
-
从 Sql Server Management Studio(或 Query Analyzer,如果它是旧的服务器版本)执行 Sql 是否正常工作?案例语句通常可以通过 Delphi 中的 Ado 数据集正常工作..
-
@JensBorrisholt,不,我通过将 Case 块转换为 View 并左加入它来解决问题,同时我已经使用 FireDAC 组件测试了这个 SQL 语句并且它有效。在我看来,ADO 组件中 Case 中的 Select 语句不起作用。
-
无论如何,整个 case 表达式有点不对劲。您有前 1 个但没有排序依据。此外,您似乎正在使用此子选择作为进行存在检查的一种方式。左连接在这里会更合适和更高效。
-
实际上,CASE 与 ADO 配合得很好。也许参数是问题/错误。
-
我的意思是,用
TADODataSet.ParamCheck := False试试这个命令,不要用:Fk作为参数...
标签: sql-server delphi ado