Guest

migratordotnet 0.8 + elmah SqlServer script configuration

By: a guest on Mar 11th, 2011  |  syntax: C#  |  size: 14.54 KB  |  hits: 97  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1.     using Migrator.Framework;
  2.  
  3.     [Migration(XXX)]
  4.     public class _XXXCreateElmahSchema : Migration
  5.     {
  6.         public override void Up()
  7.         {
  8.             Database.ExecuteNonQuery(@"
  9.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_GetErrorsXml]') AND type in (N'P', N'PC'))
  10.                DROP PROCEDURE [dbo].[ELMAH_GetErrorsXml]
  11.  
  12.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_GetErrorXml]') AND type in (N'P', N'PC'))
  13.                DROP PROCEDURE [dbo].[ELMAH_GetErrorXml]
  14.  
  15.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_LogError]') AND type in (N'P', N'PC'))
  16.                DROP PROCEDURE [dbo].[ELMAH_LogError]
  17.  
  18.                IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_ELMAH_Error_ErrorId]') AND type = 'D')
  19.                BEGIN
  20.                ALTER TABLE [dbo].[ELMAH_Error] DROP CONSTRAINT [DF_ELMAH_Error_ErrorId]
  21.                END
  22.  
  23.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_Error]') AND type in (N'U'))
  24.                DROP TABLE [dbo].[ELMAH_Error]            
  25.                "
  26.             );
  27.  
  28.             // Elmah SQL Server Script http://elmah.googlecode.com/svn/trunk/src/Elmah/SQLServer.sql
  29.             #region ELMAH Schema + SPs
  30.  
  31.             Database.ExecuteNonQuery(@"
  32.                --ELMAH - Error Logging Modules and Handlers for ASP.NET
  33.                --Copyright (c) 2004-9 Atif Aziz. All rights reserved.
  34.  
  35.                --Author(s):
  36.  
  37.                --    Atif Aziz, http://www.raboof.com
  38.                --    Phil Haacked, http://haacked.com
  39.  
  40.                --Licensed under the Apache License, Version 2.0 (the 'License');
  41.                --you may not use this file except in compliance with the License.
  42.                --You may obtain a copy of the License at
  43.  
  44.                --  http://www.apache.org/licenses/LICENSE-2.0
  45.  
  46.                --Unless required by applicable law or agreed to in writing, software
  47.                --distributed under the License is distributed on an 'AS IS' BASIS,
  48.                --WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  49.                --See the License for the specific language governing permissions and
  50.                --limitations under the License.
  51.  
  52.                -- ELMAH DDL script for Microsoft SQL Server 2000 or later.
  53.  
  54.                -- $Id$
  55.  
  56.                DECLARE @DBCompatibilityLevel INT
  57.                DECLARE @DBCompatibilityLevelMajor INT
  58.                DECLARE @DBCompatibilityLevelMinor INT
  59.  
  60.                SELECT
  61.                    @DBCompatibilityLevel = cmptlevel
  62.                FROM
  63.                    master.dbo.sysdatabases
  64.                WHERE
  65.                    name = DB_NAME()
  66.  
  67.                IF @DBCompatibilityLevel <> 90
  68.                BEGIN
  69.  
  70.                    SELECT @DBCompatibilityLevelMajor = @DBCompatibilityLevel / 10,
  71.                           @DBCompatibilityLevelMinor = @DBCompatibilityLevel % 10
  72.          
  73.                    PRINT N'
  74.                    ===========================================================================
  75.                    WARNING!
  76.                    ---------------------------------------------------------------------------
  77.    
  78.                    This script is designed for Microsoft SQL Server 2005 (9.0) but your
  79.                    database is set up for compatibility with version '
  80.                    + CAST(@DBCompatibilityLevelMajor AS NVARCHAR(80))
  81.                    + N'.'
  82.                    + CAST(@DBCompatibilityLevelMinor AS NVARCHAR(80))
  83.                    + N'. Although
  84.                    the script should work with later versions of Microsoft SQL Server,
  85.                    you can ensure compatibility by executing the following statement:
  86.    
  87.                    ALTER DATABASE ['
  88.                    + DB_NAME()
  89.                    + N']
  90.                    SET COMPATIBILITY_LEVEL = 90
  91.  
  92.                    If you are hosting ELMAH in the same database as your application
  93.                    database and do not wish to change the compatibility option then you
  94.                    should create a separate database to host ELMAH where you can set the
  95.                    compatibility level more freely.
  96.    
  97.                    If you continue with the current setup, please report any compatibility
  98.                    issues you encounter over at:
  99.    
  100.                    http://code.google.com/p/elmah/issues/list
  101.  
  102.                    ===========================================================================
  103.                '
  104.                END
  105.            ");
  106.  
  107.             Database.ExecuteNonQuery(@"
  108.                /* ------------------------------------------------------------------------
  109.                        TABLES
  110.                   ------------------------------------------------------------------------ */
  111.  
  112.                CREATE TABLE [dbo].[ELMAH_Error]
  113.                (
  114.                    [ErrorId]     UNIQUEIDENTIFIER NOT NULL,
  115.                    [Application] NVARCHAR(60)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  116.                    [Host]        NVARCHAR(50)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  117.                    [Type]        NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  118.                    [Source]      NVARCHAR(60)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  119.                    [Message]     NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  120.                    [User]        NVARCHAR(50)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  121.                    [StatusCode]  INT NOT NULL,
  122.                    [TimeUtc]     DATETIME NOT NULL,
  123.                    [Sequence]    INT IDENTITY (1, 1) NOT NULL,
  124.                    [AllXml]      NVARCHAR(MAX) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
  125.                )
  126.                ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  127.            ");
  128.  
  129.             Database.ExecuteNonQuery(@"
  130.                ALTER TABLE [dbo].[ELMAH_Error] WITH NOCHECK ADD
  131.                    CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED ([ErrorId]) ON [PRIMARY]
  132.            ");
  133.  
  134.             Database.ExecuteNonQuery(@"
  135.                ALTER TABLE [dbo].[ELMAH_Error] ADD
  136.                    CONSTRAINT [DF_ELMAH_Error_ErrorId] DEFAULT (NEWID()) FOR [ErrorId]
  137.            ");
  138.  
  139.             Database.ExecuteNonQuery(@"
  140.                CREATE NONCLUSTERED INDEX [IX_ELMAH_Error_App_Time_Seq] ON [dbo].[ELMAH_Error]
  141.                (
  142.                    [Application]   ASC,
  143.                    [TimeUtc]       DESC,
  144.                    [Sequence]      DESC
  145.                )
  146.                ON [PRIMARY]
  147.            ");
  148.  
  149.             Database.ExecuteNonQuery(@"
  150.                /* ------------------------------------------------------------------------
  151.                        STORED PROCEDURES                                                      
  152.                   ------------------------------------------------------------------------ */
  153.            ");
  154.  
  155.             Database.ExecuteNonQuery(@"
  156.                     SET QUOTED_IDENTIFIER ON
  157.            ");
  158.                 Database.ExecuteNonQuery(@"
  159.                     SET ANSI_NULLS ON
  160.            ");
  161.  
  162.             Database.ExecuteNonQuery(@"
  163.                CREATE PROCEDURE [dbo].[ELMAH_GetErrorXml]
  164.                (
  165.                    @Application NVARCHAR(60),
  166.                    @ErrorId UNIQUEIDENTIFIER
  167.                )
  168.                AS
  169.  
  170.                    SET NOCOUNT ON
  171.  
  172.                    SELECT
  173.                        [AllXml]
  174.                    FROM
  175.                        [ELMAH_Error]
  176.                    WHERE
  177.                        [ErrorId] = @ErrorId
  178.                    AND
  179.                        [Application] = @Application
  180.            ");
  181.  
  182.             Database.ExecuteNonQuery(@"
  183.                SET QUOTED_IDENTIFIER OFF
  184.            ");
  185.             Database.ExecuteNonQuery(@"
  186.                SET ANSI_NULLS ON
  187.            ");
  188.  
  189.             Database.ExecuteNonQuery(@"
  190.                SET QUOTED_IDENTIFIER ON
  191.            ");
  192.             Database.ExecuteNonQuery(@"
  193.                SET ANSI_NULLS ON
  194.            ");
  195.  
  196.             Database.ExecuteNonQuery(@"
  197.                CREATE PROCEDURE [dbo].[ELMAH_GetErrorsXml]
  198.                (
  199.                    @Application NVARCHAR(60),
  200.                    @PageIndex INT = 0,
  201.                    @PageSize INT = 15,
  202.                    @TotalCount INT OUTPUT
  203.                )
  204.                AS
  205.  
  206.                    SET NOCOUNT ON
  207.  
  208.                    DECLARE @FirstTimeUTC DATETIME
  209.                    DECLARE @FirstSequence INT
  210.                    DECLARE @StartRow INT
  211.                    DECLARE @StartRowIndex INT
  212.  
  213.                    SELECT
  214.                        @TotalCount = COUNT(1)
  215.                    FROM
  216.                        [ELMAH_Error]
  217.                    WHERE
  218.                        [Application] = @Application
  219.  
  220.                    -- Get the ID of the first error for the requested page
  221.  
  222.                    SET @StartRowIndex = @PageIndex * @PageSize + 1
  223.  
  224.                    IF @StartRowIndex <= @TotalCount
  225.                    BEGIN
  226.  
  227.                        SET ROWCOUNT @StartRowIndex
  228.  
  229.                        SELECT  
  230.                            @FirstTimeUTC = [TimeUtc],
  231.                            @FirstSequence = [Sequence]
  232.                        FROM
  233.                            [ELMAH_Error]
  234.                        WHERE  
  235.                            [Application] = @Application
  236.                        ORDER BY
  237.                            [TimeUtc] DESC,
  238.                            [Sequence] DESC
  239.  
  240.                    END
  241.                    ELSE
  242.                    BEGIN
  243.  
  244.                        SET @PageSize = 0
  245.  
  246.                    END
  247.  
  248.                    -- Now set the row count to the requested page size and get
  249.                    -- all records below it for the pertaining application.
  250.  
  251.                    SET ROWCOUNT @PageSize
  252.  
  253.                    SELECT
  254.                        errorId     = [ErrorId],
  255.                        application = [Application],
  256.                        host        = [Host],
  257.                        type        = [Type],
  258.                        source      = [Source],
  259.                        message     = [Message],
  260.                        [user]      = [User],
  261.                        statusCode  = [StatusCode],
  262.                        time        = CONVERT(VARCHAR(50), [TimeUtc], 126) + 'Z'
  263.                    FROM
  264.                        [ELMAH_Error] error
  265.                    WHERE
  266.                        [Application] = @Application
  267.                    AND
  268.                        [TimeUtc] <= @FirstTimeUTC
  269.                    AND
  270.                        [Sequence] <= @FirstSequence
  271.                    ORDER BY
  272.                        [TimeUtc] DESC,
  273.                        [Sequence] DESC
  274.                    FOR
  275.                        XML AUTO
  276.            ");
  277.  
  278.             Database.ExecuteNonQuery(@"
  279.                SET QUOTED_IDENTIFIER OFF
  280.            ");
  281.             Database.ExecuteNonQuery(@"
  282.                SET ANSI_NULLS ON
  283.            ");
  284.  
  285.             Database.ExecuteNonQuery(@"
  286.                SET QUOTED_IDENTIFIER ON
  287.            ");
  288.             Database.ExecuteNonQuery(@"
  289.                SET ANSI_NULLS ON
  290.            ");          
  291.  
  292.             Database.ExecuteNonQuery(@"
  293.                CREATE PROCEDURE [dbo].[ELMAH_LogError]
  294.                (
  295.                    @ErrorId UNIQUEIDENTIFIER,
  296.                    @Application NVARCHAR(60),
  297.                    @Host NVARCHAR(30),
  298.                    @Type NVARCHAR(100),
  299.                    @Source NVARCHAR(60),
  300.                    @Message NVARCHAR(500),
  301.                    @User NVARCHAR(50),
  302.                    @AllXml NVARCHAR(MAX),
  303.                    @StatusCode INT,
  304.                    @TimeUtc DATETIME
  305.                )
  306.                AS
  307.  
  308.                    SET NOCOUNT ON
  309.  
  310.                    INSERT
  311.                    INTO
  312.                        [ELMAH_Error]
  313.                        (
  314.                            [ErrorId],
  315.                            [Application],
  316.                            [Host],
  317.                            [Type],
  318.                            [Source],
  319.                            [Message],
  320.                            [User],
  321.                            [AllXml],
  322.                            [StatusCode],
  323.                            [TimeUtc]
  324.                        )
  325.                    VALUES
  326.                        (
  327.                            @ErrorId,
  328.                            @Application,
  329.                            @Host,
  330.                            @Type,
  331.                            @Source,
  332.                            @Message,
  333.                            @User,
  334.                            @AllXml,
  335.                            @StatusCode,
  336.                            @TimeUtc
  337.                        )
  338.            ");
  339.  
  340.             Database.ExecuteNonQuery(@"
  341.                SET QUOTED_IDENTIFIER OFF
  342.            ");
  343.             Database.ExecuteNonQuery(@"
  344.                SET ANSI_NULLS ON
  345.            ");
  346.  
  347.             #endregion
  348.         }
  349.  
  350.         public override void Down()
  351.         {
  352.             Database.ExecuteNonQuery(@"
  353.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_GetErrorsXml]') AND type in (N'P', N'PC'))
  354.                DROP PROCEDURE [dbo].[ELMAH_GetErrorsXml]
  355.  
  356.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_GetErrorXml]') AND type in (N'P', N'PC'))
  357.                DROP PROCEDURE [dbo].[ELMAH_GetErrorXml]
  358.  
  359.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_LogError]') AND type in (N'P', N'PC'))
  360.                DROP PROCEDURE [dbo].[ELMAH_LogError]
  361.  
  362.                IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_ELMAH_Error_ErrorId]') AND type = 'D')
  363.                BEGIN
  364.                ALTER TABLE [dbo].[ELMAH_Error] DROP CONSTRAINT [DF_ELMAH_Error_ErrorId]
  365.                END
  366.  
  367.                IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ELMAH_Error]') AND type in (N'U'))
  368.                DROP TABLE [dbo].[ELMAH_Error]            
  369.                "
  370.             );
  371.         }
  372.     }