Tsql SQL Server 2005跟踪错误:“0”;该参数无效;

Tsql SQL Server 2005跟踪错误:“0”;该参数无效;,tsql,sql-server-2005,stack-trace,Tsql,Sql Server 2005,Stack Trace,我正在SQL server 2005 Enterprise上运行服务器端跟踪,收到以下错误: Msg 19064,第16级,状态1,程序sp_trace_create,第1行 请求的跟踪停止时间已过 在执行正式的服务器端跟踪之前,我将使用此跟踪脚本作为测试。根据该网站的说法,我需要一个DATETIME变量(在本例中为@stop),如果NULL,该变量将无休止地继续。以下是与此相关的代码: declare @rc int declare @TraceID int declare @maxfiles

我正在SQL server 2005 Enterprise上运行服务器端跟踪,收到以下错误:

Msg 19064,第16级,状态1,程序sp_trace_create,第1行
请求的跟踪停止时间已过

在执行正式的服务器端跟踪之前,我将使用此跟踪脚本作为测试。根据该网站的说法,我需要一个
DATETIME
变量(在本例中为
@stop
),如果
NULL
,该变量将无休止地继续。以下是与此相关的代码:

declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @end datetime     

set @maxfilesize = 20
set @end = NULL

exec @rc = sp_trace_create 
    @TraceID output
    , 0
    , N'\\MyFilePath\trace'
    , @maxfilesize
    , @end
    , 100
if (@rc != 0) goto error
如果我接受了网站关于执行时间框架(如两个小时)的建议,或者如果我执行了
NULL
(见上文),我也会收到相同的错误消息。例如,如果我将参数设置为100,我不会收到错误,但我会收到另一条错误消息,其中说明以下内容:

Msg 19064,16级,状态1,程序sp_trace_create,第1行 请求的跟踪停止时间已过

除此之外,我没有收到任何像此跟踪应该生成的输出文件。请注意,我假设无效的参数是@end,因为当我将其更改为其他值时,它会以不同的错误执行

其余代码(不应与此错误相关)如下所示:

-- Trace Events: REMOVED
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 9cab2330-a33d-40d4-be59-cf5def384983'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1
--sp_trace_setstatus  @traceid =  2,  @status =  0    -- Trace stop

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go

我的错误,包括在网站上:

declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @end datetime     

set @maxfilesize = 20
set @end = NULL

exec @rc = sp_trace_create 
    @TraceID output
    , 0
    , N'\\MyFilePath\trace'
    , @maxfilesize
    , @end
    , 100 -- THIS GENERATES THE ERROR
if (@rc != 0) goto error
当我删除
,100
时,它运行正常,此参数限制了创建的文件数:

如果要限制跟踪创建的文件数-针对 例如,到10个文件-将10个文件添加到参数列表的末尾。这 在创建给定的文件数后不会停止跟踪@ 文件计数。相反,当跟踪创建新文件时,它会删除 此跟踪的最旧文件。所以如果你从Trace_1开始,Trace2… 跟踪_10,然后创建跟踪_11,跟踪_1将被删除。这 使您不会用跟踪文件填满硬盘


我将继续研究系统不接受此参数的原因(因为它有助于限制创建的文件数量),可能是兼容性问题或与版本相关的问题。

我的错误,包括在网站上:

declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @end datetime     

set @maxfilesize = 20
set @end = NULL

exec @rc = sp_trace_create 
    @TraceID output
    , 0
    , N'\\MyFilePath\trace'
    , @maxfilesize
    , @end
    , 100 -- THIS GENERATES THE ERROR
if (@rc != 0) goto error
当我删除
,100
时,它运行正常,此参数限制了创建的文件数:

如果要限制跟踪创建的文件数-针对 例如,到10个文件-将10个文件添加到参数列表的末尾。这 在创建给定的文件数后不会停止跟踪@ 文件计数。相反,当跟踪创建新文件时,它会删除 此跟踪的最旧文件。所以如果你从Trace_1开始,Trace2… 跟踪_10,然后创建跟踪_11,跟踪_1将被删除。这 使您不会用跟踪文件填满硬盘

我将继续研究为什么系统不接受此参数(因为它有助于限制创建的文件数量),它可能是一个兼容性问题或与版本相关的问题。

将参数设置为0到2

exec @rc = sp_trace_create 
    @TraceID output
    , 2 -- THIS CHANGED FROM 0 to 2
    , N'\\MyFilePath\trace'
    , @maxfilesize
    , @end
    , 100 -- THIS NO LONGER GENERATES THE ERROR
设置为0参数为2

exec @rc = sp_trace_create 
    @TraceID output
    , 2 -- THIS CHANGED FROM 0 to 2
    , N'\\MyFilePath\trace'
    , @maxfilesize
    , @end
    , 100 -- THIS NO LONGER GENERATES THE ERROR

这是答案。这是答案。查看其他答案,将@option设置为2。查看其他答案,将@option设置为2。