2017-09-11 10 views
0

私はSQLスクリプトを実行し、その結果を更新ログテーブルに挿入するデータベース更新メカニズムを作成しています。SqlException.Messageが間違ったメッセージの順序を返します

私はスクリプトを実行し、更新ログテーブルに挿入されると思われるSQLメッセージを動的に設定するためにC#を使用しています。

スクリプトにエラーがある場合、私はそれをキャッチし、SqlException.Messageを使用してメッセージに書き込みます。

if (exception != null) 
{ 
    sqlMessage += exception.Message + Environment.NewLine; 
    break; 
} 

私のスクリプトはそうのように見えます(数字と矢印がスクリプトの中で、実際にはありません):テスト用

1. USE [Database] 

    IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
       WHERE TABLE_SCHEMA = 'dbo' 
       AND TABLE_NAME = 'Users')) 
    BEGIN 
     print('Table exists - proceeding to insert'); 
    END 
    ELSE 
    BEGIN 
     -- CREATING TABLE 
     CREATE TABLE [dbo].[Users](
      [UserId] [int] NOT NULL, 
      [UserFullName] [nvarchar](100) NOT NULL, 
      [UserName] [nvarchar](100) NOT NULL, 
      [UserShortName] [nvarchar](50) NOT NULL, 
      [UserLogin] [varchar](50) NOT NULL 
     ) 
2.  print 'Created table' 
    END 

3.-> IF(EXISTS(SELECT * FROM [Users_error] WHERE UserId = 1)) 
    BEGIN 
     print('User exists - nothing to insert'); 
    END 
    ELSE 
    BEGIN 
     -- INSERTING USER 
     INSERT INTO [dbo].[Users] 
       ([UserId] 
       ,[UserFullName] 
       ,[UserName] 
       ,[UserShortName] 
       ,[UserLogin]) 
     VALUES 
      (1,'System Administrator','Admin','SA', 'SA') 
     print 'Inserted user' 
    END 

は、私はエラーをスローする「Users_error」に「ユーザー」に変更目的と(ライン矢印付き)。

私はログを、以下の期待していた(数字はスクリプトの番号に対応):代わりに

----- STARTED 2.sql ----- 
1. Changed database context to 'Database'. 
2. Created table 
3. Invalid object name 'Users_error'.  
----- FINISHED 2.sql ----- 

、私はログ次しまっ:

----- STARTED 2.sql ----- 
3. Invalid object name 'Users_error'. 
1. Changed database context to 'Database'. 
2. Created table 
----- FINISHED 2.sql ----- 

正常に戻ってそれを取得する方法はあります注文?その場所のログメッセージを使ってスクリプトをデバッグするのは非常に面倒です。

ありがとうございます!

答えて

0

Invalid object name 'Users_error'は、コンパイルエラーです。他の2つは実行メッセージです。実行前にバッチのコンパイルが行われます。詳細はUnderstanding how SQL Server executes a queryをご覧ください。

関連する問題