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 带有变量的“无效参数类型”的主要内容,如果未能解决你的问题,请参考以下文章