Sql server 相当于SQL Server的Debug.Assert
我正在修改大量SQLServer2005脚本,以将我们的两个数据库合并在一起。脚本从一个.cmd文件运行,该文件调用sqlcmd以按顺序运行脚本。但是,我遇到了一两个脚本失败的问题 我想要一个快速的方法来查看一些脚本出错的状态——检查变量值,一些查询的结果,诸如此类的东西 如果我在.NET程序集上遇到这个问题,我会使用Debug.Assert来扩充代码,或者在我知道会发生故障的地方设置断点,这将暂停程序执行并允许我签出变量值Sql server 相当于SQL Server的Debug.Assert,sql-server,sql-server-2005,debugging,Sql Server,Sql Server 2005,Debugging,我正在修改大量SQLServer2005脚本,以将我们的两个数据库合并在一起。脚本从一个.cmd文件运行,该文件调用sqlcmd以按顺序运行脚本。但是,我遇到了一两个脚本失败的问题 我想要一个快速的方法来查看一些脚本出错的状态——检查变量值,一些查询的结果,诸如此类的东西 如果我在.NET程序集上遇到这个问题,我会使用Debug.Assert来扩充代码,或者在我知道会发生故障的地方设置断点,这将暂停程序执行并允许我签出变量值 我想知道,SQL Server 2005中是否有类似的版本?我使用批处
我想知道,SQL Server 2005中是否有类似的版本?我使用批处理文件并检查如下错误代码:-
SQLCMD.EXE -b -l 30 -E -S <SERVER> -i "<SQLFILE>.sql">>"%LOG_FILE%"2>&1
IF ERRORLEVEL 1 (
ECHO. Failed.
) ELSE (
ECHO. Succeeded.
)
我从来没有设法使集成调试与SQL Server一起很好地工作过——我通常使用printf调试,使用or语句。RAISERROR可以执行一些基本的参数格式设置,将值吐出到messages窗口。例如,如果您有一个int类型的参数@Val1,您可以执行以下操作:
RAISERROR('Val1 = %i',10,1,@Val1) WITH NOWAIT
WITH NOWAIT选项使消息立即显示,而不是缓冲消息/输出的常规SQL行为。这将起作用:
-- Assert procedure equivalent to other languages.
-- raiserror() will cause sql execution to stop and throw execep in C# code that is running this statement.
-- Usage:
-- declare @shouldBeTrue bit
-- set @shouldBeTrue = case when 1=0 then 1 else 0 end
-- exec _AT3Assert @shouldBeTrue, 'failed'
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = '_AT3Assert' AND ROUTINE_SCHEMA = 'dbo' AND ROUTINE_TYPE = 'PROCEDURE')
EXEC ('DROP PROCEDURE dbo._AT3Assert')
GO
create procedure dbo._AT3Assert
@shouldBeTrue bit,
@errorMsg nvarchar (max)
AS
SET NOCOUNT ON;
if @shouldBeTrue is null or @shouldBeTrue <> 1
begin
raiserror (@errorMsg, -- Message text.
11, -- Severity.
1 -- State.
);
end
GO
为什么要把钱放在一个执行官身上?