【问题标题】:dynamic query return zero value动态查询返回零值
【发布时间】:2013-05-23 07:17:17
【问题描述】:

我正在尝试从我的表中返回一些结果,但我的查询没有返回任何结果

这是我执行存储过程的方式

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 个表由我想要的项目组成,但我的返回结果没有,它应该返回一些东西而不是没有 =(

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

【问题讨论】:

  • 尝试用logID = '+@logID+'替换logID in ('+@logID+')
  • @AndreyGordeev 我的参数格式将是逗号 =) 例如'145,156'

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


【解决方案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 = ''

【讨论】:

  • 你是对的,但我想使用 2 个查询,我不能只运行一个查询
  • 我只是尝试,它不起作用,当logid和logaction存在时,我的logaction结果将替换logid结果,我的预期结果是logid + logaction
  • 在开头使用SET @query = '',在ifs中留下SET @query = @query + ' SELECT...'
  • 并确保在两个查询之间添加空格 - 甚至更好 - 在两个查询的末尾添加分号 + '; '
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多