CREATE PROCEDURE MPTJ_Allnf
@keyword nvarchar(10) = '',
@type smallint = 0 
AS
if @keyword <> ''
SELECT * FROM [order]  --order是保留关键字,加上[]
WHERE orderid = 256 AND
CASE @type
WHEN 1 THEN case orderid when CAST(@keyword AS smallint) then 1 else 0 end
WHEN 2 THEN case xm when @keyword then 1 else 0 end
WHEN 3 THEN case name when @keyword then 1 else 0 end
END=1
ORDER BY nfdate DESC
GO

解决方案 »

  1.   

    --另一种改法就是用动态SQL语句.CREATE PROCEDURE MPTJ_Allnf
    @keyword nvarchar(10) = '',
    @type smallint = 0 
    AS
    if @keyword <> ''
    begin
    declare @s varchar(8000)
    set @s='
    SELECT * FROM [order]  --order是保留关键字,加上[]
    WHERE orderid = 256 AND
    '+CASE @type
      WHEN 1 THEN ' orderid = ' + @keyword
      WHEN 2 THEN ' xm = ''' + @keyword+''''
      WHEN 3 THEN ' name = ''' + @keyword+''''
    END+'
    ORDER BY nfdate DESC'
    exec(@s)
    end
    GO
      

  2.   

    ' xm = ''' + @keyword+''''这么多单引号,看来有此乱,结!不知邹兄能否解释一下,谢谢!!