我有以下代码。我不太了解只有第一个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';
答案 0 :(得分:6)
N'ab'
,作为固定宽度类型,如nchar(10)
,实际上是N'ab '
。因此,它与LIKE N'%ab %'
匹配,但与LIKE N'%a %'
不匹配。
对列和参数使用nvarchar(10)
而不是nchar(10)
,它应该像您期望的那样工作。