using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;

public partial class Triggers
{
    // wpisz nazwę istniejącej docelowej tabeli lub widoku i odkomentuj wiersz atrybutu
    [Microsoft.SqlServer.Server.SqlTrigger(
        Name = "ValidateYear",
        Target = "HumanResources.Department",
        Event = "FOR INSERT")]
    public static void ValidateYear()
    {
        SqlConnection conn = new SqlConnection("context connection=true");

        // zdefiniowanie zapytania
        string sql =
            "SELECT COUNT(*) " +
            "FROM INSERTED " +
            "WHERE YEAR(ModifiedDate) <> 2005";

        SqlCommand comm = new SqlCommand(sql, conn);

        // otwarcie połączenia
        conn.Open();

        // odczytanie liczby nieprawidłowych wierszy
        int numBadRows = (int)comm.ExecuteScalar();

        if (numBadRows > 0)
        {
            // pobranie SqlPipe
            SqlPipe pipe = SqlContext.Pipe;

            // wycofanie transakcji i wygenerowanie błędu
            comm.CommandText = "RAISERROR('Data ModifiedDate musi należeć do roku 2005', 11, 1)";

            // wysłanie błędu
            try
            {
                pipe.ExecuteAndSend(comm);
            }
            catch
            {
                // brak czynności
            }

            System.Transactions.Transaction.Current.Rollback();
        }

        // zamknięcie połączenia
        conn.Close();
    }
}
