2

DB に対して実行するときに列を取り、それを NOT NULL に設定するスクリプトを作成しようとしています。

列は VARCHAR(50) であると想定されており、変更されていないことがわかっていれば簡単なことですが、誰も長さを変更していないとは確信できないので、たとえば、他の誰かが 100 に増やした場合、列のサイズを縮小しないようにしてください。

私はこのようなことができることを望んでいましたが、うまくいかないようです(NULL値がないことをすでに確認していると仮定します):

DECLARE @myColumnLength INT

SET @myColumnLength = (
    SELECT character_maximum_length
    FROM information_schema.columns
    WHERE table_name = 'mytable'
    AND column_name = 'mycolumn'
)

ALTER TABLE mytable
    ALTER COLUMN mycolumn VARCHAR(@myColumnLength) NOT NULL 

何か案は?私は間違った方法で問題を攻撃していますか? 列のサイズを変更せずに列を NOT NULL に設定する方法があるのは論理的に思えますが、私の Google-fu は今日失敗しています。

4

1 に答える 1

3

動的ステートメントを作成し、次のように実行できますEXEC

DECLARE @myColumnLength INT

SET @myColumnLength = (
    SELECT character_maximum_length
    FROM information_schema.columns
    WHERE table_name = 'mytable'
    AND column_name = 'mycolumn'
)

DECLARE @cmd VARCHAR(1000)
SET @cmd = 'ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(' + @myColumnLength + ') NOT NULL'

EXEC (@cmd)
于 2012-10-09T12:08:31.160 に答える