Yii使用SQL SERVER生成的SQL语句有错误。

Yii生成的SQL如下:




SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 20 [t].[id] AS [t0_c0], [t].[title] AS [t0_c1], [t].[content] AS [t0_c2], [t].[tags] AS [t0_c3], [t].[status] AS [t0_c4], [t].[create_time] AS [t0_c5], [t].[update_time] AS [t0_c6], [t].[author_id] AS [t0_c7] FROM [dbo].[tbl_post] [t]  WHERE (status=2) ORDER BY update_time DESC) as [__inner top table__] ORDER BY update_time ASC) as [__outer top table__] ORDER BY update_time DESC



SQL SERVER 2008 报错:




消息 207,级别 16,状态 1,第 1 行

列名 'update_time' 无效。

消息 207,级别 16,状态 1,第 1 行

列名 'update_time' 无效。



嵌套查询的里面已经赋了别名,外面取到的列名就是别名了,这里的列名’update_time’应该是[t0_c6]

测试了一下,用 CDbCriteria 并且用 ‘order’=>‘update_time DESC’ 就有这个问题,不用CDbCriteria字段名就不会替换成别名,就不会有问题。

Qiang 能不能改一下,让 order 后面也是order别名?或者不替换别名?

用了 CDbCriteria 之后生成的SQL是

SELECT TOP 20 [t].[id] AS [t0_c0], [t].[title] AS [t0_c1], [t].[content] AS [t0_c2], [t].[tags] AS [t0_c3], [t].[status] AS [t0_c4], [t].[create_time] AS [t0_c5], [t].[update_time] AS [t0_c6], [t].[author_id] AS [t0_c7] FROM [dbo].[tbl_post] [t]

这种形式。这里没必要 SELECT 每个字段然后加别名。完全可以直接SELECT *

不用 CDbCriteria 生成的SQL是

SELECT TOP 20 * FROM [dbo].[tbl_post] [t]

这样就不会有问题。

顶起来,等回复。 :mellow:

顶起来,等回复。 <_<

顶起来,等回复。 :(