SQL 服务器 LIKE 运算符与 NCHAR 列比较
SQL Server LIKE operator with NCHAR column 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';
N'ab'
,作为固定宽度类型,如nchar(10)
,实际上是N'ab '
。因此它匹配 LIKE N'%ab %'
,但不匹配 LIKE N'%a %'
.
对列和参数使用 nvarchar(10)
而不是 nchar(10)
,它应该会像您期望的那样工作。
我有以下一段代码。我不太明白只有第一个 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';
N'ab'
,作为固定宽度类型,如nchar(10)
,实际上是N'ab '
。因此它匹配 LIKE N'%ab %'
,但不匹配 LIKE N'%a %'
.
对列和参数使用 nvarchar(10)
而不是 nchar(10)
,它应该会像您期望的那样工作。