sql 存储过程的问题

今天写了一个存储过程,是根据条件自定义查询条件的,主要如下:

create  PROCEDURE [sp_ba_getmateria]
(
@code varchar(20)=null,
@name varchar(40)=null
)

AS

DECLARE @SQL NVARCHAR(max)
DECLARE @WHERE NVARCHAR(1000)

set @WHERE=' WHERE 1=1 '
 
if @code is not null

 set @WHERE =@WHERE+ ' AND  [M_MATERIA].[code] = ' + @code
if @name is not null

set @WHERE =@WHERE+ ' AND  [M_MATERIA].[name] like '+ @name
 
SET @SQL = '
SELECT
[M_MATERIA].[code]
,[M_MATERIA].[kind]
,[M_MATERIA].[name]
FROM
[M_MATERIA] '+@WHERE

EXECUTE SP_EXECUTESQL @SQL 

可是却是始终报错,如果单纯的查询不输入查询条件则不报错,还有一种情况是,输入了查询条件,但是不带特殊字符之类的也不报错

这个问题纠结了我几乎一个下午

后来终于调理出来了,问题就出在上面的标红的部分:SQL语句在执行的时候不会自动给你添加引号,没有引号的都当成int类型来处理

后来我改成

if @code is not null

 set @WHERE =@WHERE+ ' AND  [M_MATERIA].[code] = ' +''''+ @code+''''
if @name is not null

set @WHERE =@WHERE+ ' AND  [M_MATERIA].[name] like '+'''' + @name+''''

 注意,哎,其实挺简单也挺郁闷的一个问题

posted @ 2012-11-21 17:35  星羽  阅读(266)  评论(0编辑  收藏  举报