关于SQL存储过程的问题?where中条件语句的累加
ALTERPROCEDURE[dbo].[kaoqinView_GetList]@employeeIdnvarchar(50),@yearint,@monthintASS...
ALTER PROCEDURE [dbo].[kaoqinView_GetList]
@employeeId nvarchar(50),
@year int,
@month int AS
SELECT
[kaoqinId],
[name],
[employeeId],
[year],
[month],
[overHour],
[chiDao],
[zaoTui],
[kuangGong]
FROM [SMS_DB].[dbo].[kaoqinView] where employeeId like '%'+@employeeId+'%' and year like '%' +@year +'%' and month like '%' +@month+ '%'--(if (!@year.Equals("0"))
--year =@year )
--
-- and
--
--(if (!@month.Equals("0"))
--month =@month)
这个存储过程应该怎么改 展开
@employeeId nvarchar(50),
@year int,
@month int AS
SELECT
[kaoqinId],
[name],
[employeeId],
[year],
[month],
[overHour],
[chiDao],
[zaoTui],
[kuangGong]
FROM [SMS_DB].[dbo].[kaoqinView] where employeeId like '%'+@employeeId+'%' and year like '%' +@year +'%' and month like '%' +@month+ '%'--(if (!@year.Equals("0"))
--year =@year )
--
-- and
--
--(if (!@month.Equals("0"))
--month =@month)
这个存储过程应该怎么改 展开
3个回答
2013-07-16
展开全部
你的问题是LIKE后面的百分号怎么跟你的变量集合起来对吧?
如果在你的存储过程中不会出现对传入参数的操作,那么,吧传入的参数改为NVARCHAR型,让传进来的值本身就带有%
如果像你后面注释掉的一样,要对这些参数进行操作(判断等),就需要把非字符串类型的数据线变成字符串,在连接就行了,用CONVERT方法
如 WHERE employeeId LIKE '%'+CONVERT(NVARCHAR,@employeeId)+'%'
如果在你的存储过程中不会出现对传入参数的操作,那么,吧传入的参数改为NVARCHAR型,让传进来的值本身就带有%
如果像你后面注释掉的一样,要对这些参数进行操作(判断等),就需要把非字符串类型的数据线变成字符串,在连接就行了,用CONVERT方法
如 WHERE employeeId LIKE '%'+CONVERT(NVARCHAR,@employeeId)+'%'
2013-07-16
展开全部
把思路放开一下,你这个存储过程其实所需要做得事情就是根据你的逻辑判断来组织后面的查询语句,你可以的存储过程可以这样,把你组织条件的语句放在程序中,查询的时候只传给存储过程一个组织好的条件进行查询就可以了,这样你的 if else判断就无需放在存储过程中了ALTER PROCEDURE [dbo].[kaoqinView_GetList]
@condition nvarchar(4000),
ASdeclare @sql nvarchar(4000)set @sql='
SELECT
[kaoqinId],
[name],
[employeeId],
[year],
[month],
[overHour],
[chiDao],
[zaoTui],
[kuangGong]
FROM [SMS_DB].[dbo].[kaoqinView] where 1=1 ' + @conditionexec(@sql) go 当然如果你一定要把 if else 判断放在存储过程中也可以,原理差不多,先通过判断拼接出查询条件,然后再将查询语句与查询条件拼接起来 通过exec来进行执行 就可以了
@condition nvarchar(4000),
ASdeclare @sql nvarchar(4000)set @sql='
SELECT
[kaoqinId],
[name],
[employeeId],
[year],
[month],
[overHour],
[chiDao],
[zaoTui],
[kuangGong]
FROM [SMS_DB].[dbo].[kaoqinView] where 1=1 ' + @conditionexec(@sql) go 当然如果你一定要把 if else 判断放在存储过程中也可以,原理差不多,先通过判断拼接出查询条件,然后再将查询语句与查询条件拼接起来 通过exec来进行执行 就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-16
展开全部
sql code: create procedure test
@NAME NVARCHAR
AS
exec('SELECT fields FROM TABLE WHERE NAME LIKE ''%' + @NAME +'%''')
@NAME NVARCHAR
AS
exec('SELECT fields FROM TABLE WHERE NAME LIKE ''%' + @NAME +'%''')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询