我认为问题出在你的书号字段类型上,char,varchar和nvarchar,nchar是有所不同的。
BOL的说明:
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expression、pattern 和 escape_character(如果有)都是 ASCII 字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar 数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容。例子:
-- ASCII pattern matching with char column
CREATE TABLE t1 (col1 char(30))
INSERT INTO t1 VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t1
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 1 row
-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 nchar(30))
INSERT INTO t VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- no rows returned
BOL的说明:
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expression、pattern 和 escape_character(如果有)都是 ASCII 字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar 数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容。例子:
-- ASCII pattern matching with char column
CREATE TABLE t1 (col1 char(30))
INSERT INTO t1 VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t1
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 1 row
-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 nchar(30))
INSERT INTO t VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- no rows returned
例子:
-- ASCII pattern matching with char column
CREATE TABLE t2 (col1 varchar(30))
INSERT INTO t2 VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t2
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 1 row-- ASCII pattern matching with char column
CREATE TABLE t4 (col1 nvarchar(30))
INSERT INTO t4 VALUES ('7-5600-2507-2/G.1181')
SELECT *
FROM t4
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 1 row
-- ASCII pattern matching with char column
CREATE TABLE t5 (col1 text)
INSERT INTO t5 VALUES ('7-5600-2507-2/G.1181')
INSERT INTO t5 VALUES ('7-5600-2507-2/G.1181 ')
SELECT *
FROM t5
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 2 row-- ASCII pattern matching with char column
CREATE TABLE t6 (col1 ntext)
INSERT INTO t6 VALUES ('7-5600-2507-2/G.1181')
INSERT INTO t6 VALUES ('7-5600-2507-2/G.1181 ')
SELECT *
FROM t6
WHERE col1 LIKE '7-5600-2507-2/G.1181' -- returns 1 row结果只有第一条被返回,少掉了第二条good luck
有时候字符串结尾有回车或者ASC码等于0的字符,这样你看见的字符串并不等于数据库中的字符串,这样的情况下也会发生你说过的那个问题
還是用varchar比較好
不會出現自動添加的空格符
所以只好解决目前用TEXT造成的问题了/