以下脚本的第一批sp_trace_create
按文档顺序调用带参数的存储过程;第二批交换参数的位置@tracefile
和@options
:
DECLARE @new_trace_id INT;
EXECUTE master.dbo.sp_trace_create
@trace_id = @new_trace_id OUTPUT,
@options = 0,
@tracefile = N'C:\temp\TestTrace';
SELECT @new_trace_id AS [@new_trace_id];
EXECUTE master.dbo.sp_trace_setstatus
@trace_id = @new_trace_id,
@status = 2;
GO
DECLARE @new_trace_id INT;
EXECUTE master.dbo.sp_trace_create
@trace_id = @new_trace_id OUTPUT,
@tracefile = N'C:\temp\TestTrace',
@options = 0;
EXECUTE master.dbo.sp_trace_setstatus
@trace_id = @new_trace_id,
@status = 2;
GO
第一批创建一个新的跟踪,选择它的 id,然后关闭跟踪。返回一个结果集:
@new_trace_id
2
第二批失败并出现错误:
消息 214,级别 16,状态 3,过程 sp_trace_create,第 1 行过程需要类型为“nvarchar(256)”的参数“@tracefile”。
为什么参数顺序会影响存储过程的输出sp_trace_create
?为什么它会因为这样一个误导性的错误信息而失败?
我相信这是因为它是一个扩展的存储过程,参数名称实际上完全被忽略了。它只是偏离了位置。
我已将它们重命名如下(并赋予它们相同的名称),它仍然可以正常工作。
Aaron 提交了一个类似的文档错误
sp_executesql
,关于.该存储过程的另一个令人讨厌的方面是
@maxfilesize
必须作为“bigint”传递,并且它不接受文字整数。我认为这也是因为它是一个扩展存储过程。这对我有用:如果您指定
@maxfiles
,则必须使用选项TRACE_FILE_ROLLOVER
(= 2):使用此选项(2)创建跟踪没有错误