SQL Server 2005 没有做正确的事情
SQLServer 2005 does not do the right thing
我在尝试使用 Like
这样的语句时遇到问题:
首先我有数据sheet:
当我执行 Sql 命令时,它没有执行我想要的操作。
我的语法:
select * from tbUsers where nUserID like N'%p%';
没有显示任何结果。虽然我知道 'Finds any values that have' p 'in any position'
结果图片:
我创建的代码 table:
Create table tbUsers(
iIDUser int identity(1,1) not null primary key,
nUserID nvarchar(50) null,
nPassWord nvarchar(50) null,
dDate datetime null,
nName nvarchar(50) null
)
INSERT INTO tbUsers(nUserID,nPassword,nName) VALUES('phuc','123456', 'Phuc Nguyen')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long%ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('phuc nguyen','123456')
请帮助我。谢谢。
由于您使用的是越南语排序规则,因此无法取回行。不过,您可以很容易地在查询中指定排序规则,它将 return 您要查找的行。
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
您好,您的问题可能是您的排序规则,如果您出于任何原因需要越南语排序规则,您可以更改查询以在查询中使用排序规则,如下所示:
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
如果不是,我的建议是使用排序规则 SQL_Latin1_General_CP1_CI_AS 重新创建数据库,因为此查询会很慢。
还要考虑到如果您在用户列中使用双 %% 的索引,这将不会让您的索引被使用。如果您只使用 1%,索引将被激活。看看执行计划来回顾一下。
如果想继续使用越南语排序规则,可以将排序规则更改为此类功能所需的列。这将帮助您提高性能。
要更改列的排序规则,请使用
ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]
你可以看看这个问题了解更多详情
How to set collation of a column with SQL?
我在尝试使用 Like
这样的语句时遇到问题:
首先我有数据sheet:
当我执行 Sql 命令时,它没有执行我想要的操作。
我的语法:
select * from tbUsers where nUserID like N'%p%';
没有显示任何结果。虽然我知道 'Finds any values that have' p 'in any position'
结果图片:
我创建的代码 table:
Create table tbUsers(
iIDUser int identity(1,1) not null primary key,
nUserID nvarchar(50) null,
nPassWord nvarchar(50) null,
dDate datetime null,
nName nvarchar(50) null
)
INSERT INTO tbUsers(nUserID,nPassword,nName) VALUES('phuc','123456', 'Phuc Nguyen')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long%ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('phuc nguyen','123456')
请帮助我。谢谢。
由于您使用的是越南语排序规则,因此无法取回行。不过,您可以很容易地在查询中指定排序规则,它将 return 您要查找的行。
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
您好,您的问题可能是您的排序规则,如果您出于任何原因需要越南语排序规则,您可以更改查询以在查询中使用排序规则,如下所示:
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
如果不是,我的建议是使用排序规则 SQL_Latin1_General_CP1_CI_AS 重新创建数据库,因为此查询会很慢。
还要考虑到如果您在用户列中使用双 %% 的索引,这将不会让您的索引被使用。如果您只使用 1%,索引将被激活。看看执行计划来回顾一下。
如果想继续使用越南语排序规则,可以将排序规则更改为此类功能所需的列。这将帮助您提高性能。
要更改列的排序规则,请使用
ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]
你可以看看这个问题了解更多详情
How to set collation of a column with SQL?