AccessからSQL Serverに移行していくつかハマりつつ解決策が何となく発見されたものについて。
NULLを含む列のユニーク化
普通にやるとNULL同士が重複しているとエラーになる。
本当ならNULLはNULLと重複しないのがSQLの規定のはずだが仕方がない。
インデックスを作成して、フィルターに IS NOT NULLを付ければNULL以外は重複禁止、ができるようだ
集計データ列
列に式を入れる方法。本当なら一意でないデータを1行内に入れるのはよろしくないのだが、ビューにすると更新とか面倒になったので数式で。
正式名と省略名があって省略名があれば省略名、無ければ正式名とする方法
CREATE TABLE 商品 (
正式名 nvarchar(20) NOT NULL,
省略名 nvarchar(10) NULL,
商品名 AS (ISNULL([省略名],[商品名]))
CREATE UNIQUE NONCLUSTERED INDEX
[商品正式名] ON [商品]( [正式名) ASC)
CREATE UNIQUE NONCLUSTERED INDEX
[商品省略名] ON [商品]( [省略名) ASC)
WHERE ([省略名] IS NOT NULL)
こんな感じで正式名はNOT NULLで重複禁止、省略名はNULL okで重複禁止、商品名ができるだけ短い名前、といったテーブルが作成できた
SQLServer Mangement Studio では、テーブルの構造から列のプロパティ内 計算式の指定で(ISNULL([省略名],[商品名])
テーブルのインデックスから新規作成もしくはプロパティで、フィルターにhoge IS NOT NULLを入れればOKでした
Accessが便利になっているのかSQLServerが固すぎるのか。
VPNの向こうのSQLServerにつなげているのもあって、Access単体の方が早くていじりやすくて楽だった・・・
コメントを残す