そこでUniqueキー制約をつけてみると・・・
using System;
using System.Data;
using System.Data.SQLite;
namespace SampleCode
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SQLiteConnection con = new SQLiteConnection("Data Source=:memory:"))
                {
                    con.Open();
                    using (SQLiteCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = "CREATE TABLE [Blog](" +
                                          "[tag]  TEXT    NOT NULL, " +
                                          "UNIQUE([tag])" +
                                          ");";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "INSERT INTO [Blog] ([tag]) VALUES('SQLite');";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "INSERT INTO [Blog] ([tag]) VALUES('SQLITE');";
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}問題なく入ります。大文字と小文字を別物として判断しているからです。
そこで、大文字小文字を区別してほしくない列にCOLLATE NOCASEをつけてみます。
using System;
using System.Data;
using System.Data.SQLite;
namespace SampleCode
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SQLiteConnection con = new SQLiteConnection("Data Source=:memory:"))
                {
                    con.Open();
                    using (SQLiteCommand cmd = con.CreateCommand())
                    {
                        cmd.CommandText = "CREATE TABLE [Blog](" +
                                          "[tag]  TEXT    NOT NULL, " +
                                          "UNIQUE([tag] COLLATE NOCASE)" +
                                          ");";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "INSERT INTO [Blog] ([tag]) VALUES('SQLite');";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "INSERT INTO [Blog] ([tag]) VALUES('SQLITE');";
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}エラーがでるようになりました。
constraint failed UNIQUE constraint failed: Blog.tag
もちろん、PRIMARY KEYであっても同じことです。
cmd.CommandText = "CREATE TABLE [Blog](" +
                                        "[tag]  TEXT , " +
                                        "PRIMARY KEY([tag] COLLATE NOCASE)" +
                                        ");";
uniqueじゃないと怒ってくれます。
constraint failed UNIQUE constraint failed: Blog.tag
 
0 件のコメント:
コメントを投稿