if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SEARCH_PPXX1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[SEARCH_PPXX1]
GOSET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO
CREATE PROCEDURE [dbo].[SEARCH_PPXX1]
(
   @BL_ID int,
   @LC_ID int,
   @PP_ID int
 )
ASdeclare @sqlstr varchar(1000)if(@LC_ID<>0 and @BL_ID=0 and @PP_ID=0)
set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                 where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID  and C.LC_ID=B.LC_ID
                 and A.LC_ID='''+@LC_ID+''''
                                  
if(@LC_ID<>0 and @BL_ID<>0 and @PP_ID=0)
  set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                 where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID and C.LC_ID=B.LC_ID
                 and A.LC_ID=1 and A.BL_ID=1'
if(@LC_ID<>0 and @BL_ID<>0 and @PP_ID<>0)
  set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                 where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID and C.LC_ID=B.LC_ID
                 and A.LC_ID=1 and A.BL_ID=1 and A.PP_ID=1'exec (@sqlstr) GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
错误:
System.Data.SqlClient.SqlException: 将 varchar 值 'select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID and C.LC_ID=B.LC_ID and A.LC_ID='' 转换为数据类型为 int 的列时发生语法错误。

解决方案 »

  1.   

    1. 
      A.LC_ID=''    //这里A.LC_ID是整形,怎么能和''比较?  将''改成一个数值试一下.
    2.
      如果不行的话:
      你看一下:  表PPXX  LCXX BLXX 这三个表的:  ID字段都是不是整型的.
      

  2.   

    你看看
    你在将参数传到存储过程里的时候,
    是否都已经是可心正常转换成int类型的了。。
      

  3.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SEARCH_PPXX1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[SEARCH_PPXX1]
    GOSET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
    CREATE PROCEDURE [dbo].[SEARCH_PPXX1]
    (
       @BL_ID int,
       @LC_ID int,
       @PP_ID int
     )
    ASdeclare @sqlstr varchar(1000)if(@LC_ID<>0 and @BL_ID=0 and @PP_ID=0)
    set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                     where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID  and C.LC_ID=B.LC_ID
                     and convert(varchar(20),A.LC_ID)='''+convert(varchar(20),@LC_ID)+''''
                                      
    if(@LC_ID<>0 and @BL_ID<>0 and @PP_ID=0)
      set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                     where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID and C.LC_ID=B.LC_ID
                     and A.LC_ID=1 and A.BL_ID=1'
    if(@LC_ID<>0 and @BL_ID<>0 and @PP_ID<>0)
      set @sqlstr='select A.PP_NAM,A.PP_LOGO,B.LC_NAM,C.BL_NAM from PPXX A,LCXX B,BLXX C
                     where A.LC_ID=B.LC_ID and A.BL_ID=C.BL_ID and C.LC_ID=B.LC_ID
                     and A.LC_ID=1 and A.BL_ID=1 and A.PP_ID=1'exec (@sqlstr) GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  4.   

    也就是将and A.LC_ID='''+@LC_ID+''''改为and convert(varchar(20),A.LC_ID)='''+convert(varchar(20),@LC_ID)+''''