请查看此数据库架构:
create table Person (id int not null identity,
[index] varchar(30),
datecreated datetime,
groupid int)
create table [Group] (id int identity not null, description varchar(30))
样本数据:
insert into Person ([index],datecreated,groupid) values ('4,5,6','2011-01-01',1)
insert into Person ([index],datecreated,groupid) values ('1,2,3','2011-02-02',1)
insert into Person ([index],datecreated,groupid) values ('7,8','2012-02-02',2)
insert into [Group] (description) values ('TestGroup')
insert into [Group] (description) values ('TestGroup2')
请看下面的 SQL 语句:
select *
from Person
inner join [Group] on Person.groupid = [group].id
where [group].description = 'TestGroup'
order by
left(substring([index], charindex(',', [index]) + 1, 200),
charindex(',', substring([index], charindex(',', [index]) + 1, 200)) - 1)
此 SQL 语句失败并出现以下错误:
传递给 SUBSTRING 函数的长度参数无效。
它是order by
导致此错误的子句,即它试图查找索引列的第三个元素,但第三个元素不存在于第 3 行(只有两个元素)。
但是,我希望[group].description = 'TestGroup'
过滤掉记录三。情况似乎并非如此。就好像该order by
子句在该子句之前运行where
。如果order by
从查询中排除子句,则查询运行。
为什么是这样?