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+''''
注意,哎,其实挺简单也挺郁闷的一个问题