xp_readerrorlog 带有变量的“无效参数类型”

Posted

技术标签:

【中文标题】xp_readerrorlog 带有变量的“无效参数类型”【英文标题】:xp_readerrorlog "Invalid parameter type" with variable 【发布时间】:2015-09-18 18:32:49 【问题描述】:

我正在尝试编写一些代码来从 SQL 2008R2 实例中查询 SQL 错误日志。这是我所拥有的:

declare @Start_Time  DATETIME = NULL;
declare @End_Time    DATETIME = NULL;

IF @Start_Time IS NULL 
  SELECT @Start_Time = GETDATE()-1
IF @End_Time   IS NULL 
  SELECT @End_Time   = GETDATE()

select @start_time start_time, CONVERT(VARCHAR(19),@start_time,120) conv_s_time
select @End_time   end_time,   CONVERT(VARCHAR(19),@End_time,120)   conv_e_time
EXEC xp_ReadErrorLog 0, 1, '', '', '2015-09-17 11:47:16', '2015-09-18 11:47:16' 
EXEC xp_ReadErrorLog 0, 1, '', '', ' + CONVERT(VARCHAR(19),@Start_Time,120) ' 
EXEC xp_ReadErrorLog 0, 1, '', '', ' + CONVERT(VARCHAR(19),@Start_Time,120) ' , ' + CONVERT(VARCHAR(19),@End_Time,120) '

这个的输出是:

start_time  conv_s_time
2015-09-17 11:59:10.617 2015-09-17 11:59:10

end_time    conv_e_time
2015-09-18 09:35:10.617 2015-09-18 09:35:10

LogDate ProcessInfo Text
<  2000+ rows of data >

LogDate ProcessInfo Text
<  45,000+ rows of data >

Msg 22004, Level 12, State 1, Line 0
Error executing extended stored procedure: Invalid Parameter Type

对 xp_ReadErrorLog 的调用适用于两个硬编码日期(开始和结束)和一个变量作为开始日期,但当开始和结束日期都指定为变量时调用失败。有人对为什么我不能在调用 xp_ReadErrorLog 时对两个参数都使用变量有任何建议吗?

任何帮助表示赞赏。

【问题讨论】:

是否有理由将参数转换为varchar?直接使用变量对我有用。 我正在修改其他开发人员的代码,但不知道他们为什么在参数中调用 CONVERT。你是对的,只传入 start_time 和 end_time 参数就可以了。谢谢。 【参考方案1】:

---------------- SQL 脚本 -----------------------------

Declare @Today varchar(50)
declare @tomorrow varchar(50)
declare @Statement nvarchar(100)

set @today = (select convert(varchar(8), getdate(), 112))
Print @Today
set @Tomorrow= (select CONVERT(VARCHAR(10), GETDATE()-1, 112))
Print @tomorrow

Set @Statement = 'EXEC xp_readerrorlog 0,2, N''error'', N''Failed'', '+'N'''++@tomorrow+''''++','+ ++'N'''+@today+''''
Print @Statement 
exec sp_executesql @Statement

------结果---------------

【讨论】:

以上是关于xp_readerrorlog 带有变量的“无效参数类型”的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 日志查看

如何使用带有双指针变量的结构字段(没有支持变量)?

带有嵌入变量的 Ruby 字符串

带有虚拟/分类变量的线性回归

带有常量的 PHP 类变量

带有索引变量 oracle 的 TOP