| MSDE FunClub |
|
最終更新日 : 2000/07/22 |
|
Microsoft Data Engine FunClub
|
Since 2000.07.22
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章195p 〜 197p掲載】 |
-- [DDL系SQL文の基礎(例題13)EX3-11.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- 指定されたテーブルの指定された列のデフォルト値を設定します
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- ( 件処理されました)のメッセージの表示を抑止します
SET NOCOUNT ON
GO
-- ******************************************************
-- デフォルト値設定を行なうストアドプロシージャの登録
-- ******************************************************
IF( (object_id('SetDefaultValue') IS NOT NULL) AND
OBJECTPROPERTY( object_id('SetDefaultValue' ) , 'IsProcedure' ) = 1 )
BEGIN
DROP PROCEDURE SetDefaultValue
END
GO
CREATE PROCEDURE SetDefaultValue
@TblName sysname , -- 対象となるテーブル
@ColName sysname , -- 対象となる列の名前
@Default varchar(80) , -- 設定を行なうデフォルト値
@DelFlag int -- 0:デフォルト値の削除を行なう
-- 1:デフォルト値の削除と登録を行なう
AS
SET NOCOUNT ON
DECLARE @Def varchar(80)
DECLARE @ConstNm varchar(80) -- DEFAULT値の制約名
DECLARE @cmd varchar(256) -- 動的SQL文
--デフォルト値が列に設定されているかどうか調査する
--システムビュー表を調査する
--デフォルト値の設定文字列の取得
SELECT @Def=COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS
WHERE((TABLE_NAME=@TblName) AND (COLUMN_NAME=@ColName))
-- デフォルト値の制約名を取得する
-- sysobjects テーブルを以下のように検索する
SELECT @ConstNm = name FROM sysobjects
WHERE( ( xtype = 'D ' ) -- DEFAULT制約は 'D 'となる
AND (OBJECT_NAME( parent_obj )= @TblName) -- 制約が設定されたテーブル
AND (COL_NAME(parent_obj,info)= @ColName) -- DEFAULT制約が付けられた列の名前
)
-- デフォルト値の制約名が取得できましたか?
-- 初めての時は、制約名を作成します(DF_テーブル名_列の名前)
-- SQL7.0では DF_Tblname_Column
-- MSDE では DF__Tblname__Column
-- 何で、MSDEのデフォルト制約名のアンダーバーは、2個なの?
-- ここでは、SQl7の方に合わせました
IF( @ConstNm IS NULL ) SELECT @ConstNm = 'DF_' + @TblName + '_' + @ColName
IF( @Def IS NOT NULL )
BEGIN
-- デフォルト値が設定されている
PRINT '削除前のデフォルト値 = ' + @def
-- デフォルト値の制約を削除する
EXEC( 'ALTER TABLE ' + @TblName + ' DROP CONSTRAINT ' + @ConstNm )
END
ELSE
BEGIN
PRINT '[' + @ColName + ']列には、デフォルト値の設定はありませんでした'
END
IF( @DelFlag = 0 ) RETURN 0
-- 新しいデフォルト値の設定を行なう
SELECT @cmd = 'ALTER TABLE ' + @TblName + ' ADD ' +
'CONSTRAINT ' + @ConstNm + ' DEFAULT ' + @Default + ' FOR ' + @ColName
--PRINT @cmd
--PRINT ''
EXECUTE( @cmd )
RETURN 0
GO
-- デフォルト値の設定例
EXEC SetDefaultValue '受注' , '社員コード' , '10' , 1 --数字の設定
EXEC SetDefaultValue '受注' , '得意先コード' , '999' , 1
EXEC SetDefaultValue '受注' , '出荷先名' , '''ヤマト''' , 1 --文字列の設定
EXEC SetDefaultValue '受注' , '受注日' , 'GETDATE()' , 1 --関数の設定
GO