7
votes

Équivalent de Debug.assert pour SQL Server

J'adapte un grand nombre de scripts SQL Server 2005 pour fusionner deux de nos bases de données ensemble. Les scripts sont exécutés à partir d'un fichier .cmd qui appelle SQLCMD pour exécuter les scripts dans l'ordre. Cependant, je ressens une ou deux questions où les scripts échouent.

J'aimerais avoir un moyen rapide d'examiner l'état de certains des scripts où ils vont mal - vérifiez les valeurs variables, les résultats de certaines requêtes, des trucs comme ça.

Si j'avais ce problème avec un assemblage .NET, j'aurais augmenté le code avec Debug.assert ou définir des points d'arrêt dans lesquels je savais que les défaillances se produiraient, ce qui pause une exécution du programme et permettrait de vérifier les valeurs variables. .

Je me demandais, y a-t-il un équivalent dans SQL Server 2005?


0 commentaires

3 Réponses :


0
votes

J'utilise des fichiers par lots et vérifiez le code d'erreur comme celui-ci: -

SQLCMD.EXE -b -l 30 -E -S <SERVER> -i "<SQLFILE>.sql">>"%LOG_FILE%"2>&1

IF ERRORLEVEL 1 (
    ECHO. Failed.
) ELSE (
    ECHO. Succeeded.
)


0 commentaires

9
votes

0 commentaires

3
votes

Cela fonctionnera:

-- 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


1 commentaires

Pourquoi envelopper la chute d'un EXED?