具有NCHAR列比较的SQL Server LIKE运算符

时间:2016-12-04 23:36:35

标签: sql sql-server sql-like string-comparison

我有以下代码。我不太了解只有第一个EXEC语句有结果。有人可以帮忙解释一下吗?

USE tempdb;
GO

IF OBJECT_ID('dbo.students') IS NOT NULL
    DROP TABLE dbo.students;
CREATE TABLE dbo.students
(
    id   INT NOT NULL IDENTITY PRIMARY KEY,
    name NCHAR(10)
);

INSERT INTO dbo.students(name)
SELECT c FROM(VALUES(N'ab'), (N'cd'), (N'ef'), (N'gh')) AS DATA(c);

SELECT *, DATALENGTH(name)FROM dbo.students;
GO

IF OBJECT_ID(N'dbo.check_address') IS NULL
BEGIN
    EXEC('CREATE PROCEDURE dbo.check_address AS SELECT ''to be replaced''');
END;
GO

ALTER PROCEDURE dbo.check_address @name NCHAR(10)
AS
BEGIN
    SELECT * FROM dbo.students WHERE name LIKE N'%' + @name + N'%';
END;
GO

EXEC check_address N'ab';
EXEC check_address N'a';

1 个答案:

答案 0 :(得分:6)

N'ab',作为固定宽度类型,如nchar(10),实际上是N'ab '。因此,它与LIKE N'%ab %'匹配,但与LIKE N'%a %'不匹配。

对列和参数使用nvarchar(10)而不是nchar(10),它应该像您期望的那样工作。