动态查询返回零值

时间:2013-05-23 07:17:18

标签: sql stored-procedures sql-server-2008-r2

我试图从我的表中返回一些结果,但我的查询返回无结果

这是我如何执行我的存储过程

EXEC spLog '145',' ','2531'

这是我的存储过程示例,音乐会是相同的,从我的表中返回一些值

Created Procedure spLog
 @logID nvarchar(400),
 @logAction nvarchar(400),
 @userId nvarchar(400)
AS
Begin
DECLARE @query nvarchar(4000)

if(LEN(@logID)>0)
BEGIN
SET @query = @query + 'Select * From LogTable where logID in ('+@logID+') AND userID = '+@userId + ''
END
if (LEN(@logAction)>0)
BEGIN
SET @query = @query + 'Select * From logAction where logAction in ('+@logAction+') AND userID = '+@userId + ''
END

EXEC sp_executesql @query

END

列命名和表命名只是一个例子,忽略它,我的2表包含我想要的项目,但我的返回结果是none,它应该返回一些东西而不是没有=(

我的预期结果是[logTable结果] + [LogAction结果]或[logTable结果]或[LogAction结果]

1 个答案:

答案 0 :(得分:1)

您已声明@query变量,但从未设置过它的初始值 - 因此在开头就是NULL

DECLARE @query nvarchar(4000)

稍后您将字符串连接到您的变量,并且连接NULL + 'something'仍会使其成为NULL

SET @query = @query + 'Select * From LogTable where logID in ('+@logID+') AND userID = '+@userId + ''

只需用

替换它
 SET @query = 'Select * From LogTable where logID in ('+@logID+') AND userID = '+@userId + ''

或者在早些时候将变量设置为空字符串:

DECLARE @query nvarchar(4000)
SET @query = ''