我认为问题出在你的书号字段类型上,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

解决方案 »

  1.   

    或者采用varchar和nvarchar
    例子:
    -- 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
      

  2.   

    书号如果是text类型,除非那条记录的书号多了一个空格。我的测试如下:
    -- 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
      

  3.   

    建议你改用VARCHAR,从应用上看,你这个字段没必要使用TEXT,现在你是在比较这个地方遇到了问题,以后你还会在很多别的地方因为TEXT给你制造麻烦
    有时候字符串结尾有回车或者ASC码等于0的字符,这样你看见的字符串并不等于数据库中的字符串,这样的情况下也会发生你说过的那个问题
      

  4.   

    同意樓上的
    還是用varchar比較好
    不會出現自動添加的空格符
      

  5.   

    当然,我用TEXT是有这方面原因的,我肯定知道用VCHR比较好,但是既然目前不能用VCHAR
    所以只好解决目前用TEXT造成的问题了/