ALTER  Procedure ProductSearch
(
    @ProductName char(30)
 )
ASSELECT 
  
   *FROM 
    Products
WHERE     productName LIKE '%'+ @ProductName+'%' GOGO我在SQL SERVER 2000 中编写了这个模拟查询的语句.
在ASP.NET调用该存储过程,可是得不到我要的结果.
确定是SQL SERVER 中 LIKE 写的有问题, 
在存储过程中的'%'字段编译后好象出现问题. 请高手帮忙! 

解决方案 »

  1.   

    declare @para varchar(255)
    select @para = '%'+ @ProductName+'%'
    select * from Products where productName like @para
    go
      

  2.   

    declare @para varchar(255)
    select @para = 'like ''%'+ @ProductName+'%'''
    select * from Products where productName @para
    go
    sql中''表一个'
      

  3.   

    问题解决了,   把@ProductName的类型改成 varchar(30)
     就可以了.
     至于 要在char 类型上进行模糊匹配查询,有待高手继续帮忙.
      

  4.   

    CREATE PROC dbo.ProductSearch
    @ProductName nvarchar(255)
    AS
    select * from Products
    where productName LIKE '%' + @ProductName + '%'
    GO把这个粘贴保你好用
      

  5.   

    但是同时你要注意
    1)Products和productName这些表和列名称是否正确。
    2)+符号前后的运算对象是否和+之间有空格
    3)单引号是否写成了中文全角字符
    还有。请不要使用char或nchar请使用varchar或nvarchar并且为参数保留尽可能长一点的宽度
      

  6.   

    productName LIKE '%'+ @ProductName+'%'
    改成:
    productName charindex('"+productname+"',productname)>0
      

  7.   

    少了@
    productName charindex('"+@productname+"',productname)>0
      

  8.   

    你这个语句看上去没错。
    但你要注意,你是否使用了全角(中文)的
    空格 ' % + 这些符号,因为查询分析器有些符号看不出来。
    我就有过不小心使用了中文‘而不能显示,然后又报错的经历。
    你把这个存储过程放到查询分析器中运行一下,看是否报错,报错的位置。然后再看是否有上述问题。如果没有,建议检查ASP。NET代码。
      

  9.   

    另外,确保你的ASP.NET代码是用Parameter对象来传送参数而不是使用SQL字符串拼接
      

  10.   

    我复制你的代码中的''+进来,结果有错,有可能你使用了中文符号
    我现在再试一下,如果没问题。你就是这个原因。
    select * from t_subject where caption like '%' + '' + '%'
      

  11.   

    也在可以在调用存储过程时,在程序中使用'%'+ @ProductName+'%'作为传递参数.在存储过程中就无需在使用%了.