C# Programming

SQL 2008

テーブルの作成、変更、削除

テーブル操作は基本です。

1.目次

1.目次
2.テーブルの生成
3.テーブルの変更
4.テーブルの削除
 4.1 テーブルそのものの削除
 4.2 テーブルの内容を削除
 4.3 テーブルの内容を削除(TRUNCATE TABLE)

.テーブルの生成

USE [test]
GO

SET ANSI_NULLS ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Picture_T](
[ID] [int] IDENTITY(-1,-1) NOT NULL,
[FileName] [nvarchar](255) COLLATE Japanese_CI_AS NULL,
[Picture] [varbinary](max) NULL,
CONSTRAINT [PK_Picture_T] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

GO
SET ANSI_NULLS OFF

 

設定 char(n) NOT NULL
または
binary(n) NOT NULL
char(n) NULL
binary(n) NULL
varchar(n)
varbinary(n)
SET ANSI_PADDING ON 列幅になるまで0を追加する。 列幅になるまで0を追加する。 varcharの場合、空白文字が挿入される。

varbinaryの場合、バイナリーの0が挿入される。 Values are not padded to the length of the column.

SET ANSI_PADDING OFF 列幅になるまで0を追加する。 varcharの場合、最後尾の空白文字列は取り除かれる。

varbinaryの場合、最後尾のバイナリーの0が取り除かれる。

varcharの場合、最後尾の空白文字列は取り除かれる。

varbinaryの場合、最後尾のバイナリーの連続する0が取り除かれる。

 

設定 動作
SET ANSI_NULLS ON NULL 値に対するすべての比較は UNKNOWNになる。
SET ANSI_NULLS OFF データ値が NULL の場合は、NULL 値に対するすべてのデータ比較は TRUEになる。

注意: NULL 値を含む可能性のある比較では、IS NULL と IS NOT NULL を使用すること。

注意: これらの設定は注意が必要。詳細はブックオンラインを見るべし。

2.1 列のデフォルト値

行を挿入するときに列の値が指定されなかった場合、その列に使用する値を指定します。デフォルトは定数として評価されるものであれば、次のいずれでもかまいません。

  • 定数
  • 組み込み関数
  • 計算式

デフォルトを適用するには、次の 2 つの方法があります。

  • CREATE TABLE で DEFAULT キーワードを使用してデフォルト定義を作成し、定数式を列のデフォルトとして割り当てます。


    CREATE TABLE test_defaults
       (keycol      smallint,
       process_id   smallint DEFAULT @@SPID,   --Preferred default definition
       date_ins   datetime DEFAULT getdate(),   --Preferred default definition
       mathcol      smallint DEFAULT 10 * 2,   --Preferred default definition
       char1      char(3),
       char2      char(3) DEFAULT 'xyz') --Preferred default definition

     

  • CREATE DEFAULT ステートメントを使用してデフォルト オブジェクトを作成し、sp_bindefault システム ストアド プロシージャを使用してそのオブジェクトを列にバインドします。

    CREATE DEFAULTは以前のバージョンのものとの互換性を保つための機能。


    CREATE DEFAULT abc_const AS 'abc'
    GO
    sp_bindefault abc_const, 'test_defaults.char1'
    GO
    INSERT INTO test_defaults(keycol) VALUES (1)

 

.テーブルの変更

大きなテーブル内のすべての行に影響する変更は、その実行終了までに長い時間がかかり、多くのログ レコードを発生するので注意が必要。

列の変更例

ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL

3.1 ALTER TABLE 構文

ALTER TABLE table
{ [ ALTER COLUMN column_name
    { new_data_type [ ( precision [ , scale ] ) ]
        [ COLLATE < collation_name > ]
        [ NULL | NOT NULL ]
        | {ADD | DROP } ROWGUIDCOL }
    ]
    | ADD

        { [ < column_definition > ]
        column_name AS computed_column_expression
        } [ ,...n ]
    | [ WITH CHECK | WITH NOCHECK ] ADD
        { < table_constraint > } [ ,...n ]
    | DROP
        { [ CONSTRAINT ] constraint_name
            | COLUMN column } [ ,...n ]
    | { [ WITH CHECK | WITH NOCHECK ] CHECK | NOCHECK } CONSTRAINT
        { ALL | constraint_name [ ,...n ] }
    | { ENABLE | DISABLE } TRIGGER
        { ALL | trigger_name [ ,...n ] }
}

< column_definition > ::=
    { column_name data_type }
    [ [ DEFAULT constant_expression ] [ WITH VALUES ]
    | [ IDENTITY [ (seed , increment ) [ NOT FOR REPLICATION ] ] ]
        ]
    [ ROWGUIDCOL ]

    [ COLLATE < collation_name > ]
    [ < column_constraint > ] [ ...n ]

< column_constraint > ::=
    [ CONSTRAINT constraint_name ]
    { [ NULL | NOT NULL ]
        | [ { PRIMARY KEY | UNIQUE }
            [CLUSTERED | NONCLUSTERED]
            [ WITH FILLFACTOR = fillfactor ]
            [ON {filegroup | DEFAULT} ]
            ]
        | [ [ FOREIGN KEY ]

            REFERENCES ref_table [ ( ref_column ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [NOT FOR REPLICATION]
            ]
        | CHECK [NOT FOR REPLICATION]

            ( logical_expression )
    }

< table_constraint > ::=
    [ CONSTRAINT constraint_name ]
    { [ { PRIMARY KEY | UNIQUE }
        [CLUSTERED | NONCLUSTERED]
        { ( column [ ,...n ] ) }
        [ WITH FILLFACTOR = fillfactor ]
        [ ON {filegroup | DEFAULT } ]
        ]
        |    FOREIGN KEY

            [ ( column [ ,...n ] ) ]
            REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [NOT FOR REPLICATION]
        | DEFAULT constant_expression
            [ FOR column ] [ WITH VALUES ]
        |    CHECK [NOT FOR REPLICATION]
            ( search_conditions )
    }

 

.テーブルの削除

テーブルのそのものを削除する場合(DROP)と、テーブルの行を削除する場合があります。

.1 テーブルそのものの削除

テーブルそのものの削除例

USE [test]

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ExampleTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[ExampleTable]

DROP TABLE table_name

4.2 テーブルの内容を削除

DELETE テーブルまたはビュー FROM テーブルソース WHERE ...

USE Northwind

DELETE [Order Details]
FROM Suppliers
WHERE Suppliers.CompaneyName = 'Lyngbysild'

.3 テーブルの内容を削除(TRUNCATE TABLE)

各行の削除内容を記録せずにテーブル内のすべての行を削除する。

TRUNCATE TABLE テーブル名

機能的には WHERE 句のない DELETE ステートメントと同じですが、DELETE と比べると、TRUNCATE TABLE の方が高速で、使用するシステムおよびトランザクション ログのリソースも少なくてすみます。