2017-03-15 7 views
0

SQLサーバには完全に機能するデータベースがあります。約40のテーブル。私は複数の他のSQL Serverインスタンスにこのスキーマ(データのみではなくスキーマ)をインストールする必要があります。 SSMSは、Tasks - > Generate Scriptsを使用してスキーマを自動生成する良い方法を提供します。それはちょっと動作しますが、私はそれを正しく理解すればわからない:私は(、スクリプトを実行し、まったく同じ内容で新しいスクリプトを作成し、それに新しい列を追加する場合は、たまたまssmsでデータベーススキーマスクリプトを作成

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U')) 
BEGIN 
CREATE TABLE [dbo].[TableName](
    [id] [uniqueidentifier] NOT NULL, 
    [history] [varchar](max) NOT NULL, 
    [isdeleted] [bit] NOT NULL, 
CONSTRAINT [PK_RecGroupData] PRIMARY KEY CLUSTERED 
(
    [rid] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
END 

GO 
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[DF_TableName_id]') AND type = 'D') 
BEGIN 
ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [DF_TableName_id] DEFAULT (newid()) FOR [id] 
END 
--Just showing one ALTER TABLE and IF NOT EXISTS. The others are generated in the same way. 

何 - - >id,history,isdeleted,timestamp)?それは自動的に新しい行を追加しますか?もちろん、はい、もちろんだと思いますが、列がNOT NULLVARCHARBIT、またはそれに類するものである必要があるかどうかはわかりません。それはちょうど

ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [DF_TableName_id] DEFAULT (newid()) FOR [id] 

id =>新しいサンプル列) を実行するだろうが、データ型または任意の他の修飾子についての情報はありません。 また、私はこの1つのように二度目の私のスクリプトを実行した場合、それはいくつかのエラーをスローします:

Meldung 1781、エベヌ16、ステータス1、Zeile 3 アン死ぬSpalteイストbereitsアインDEFAULT-ワートgebunden 。このように変換さ

:1781

メッセージ、レベル16、状態1、行3 デフォルト値が既にカラムに結合されています。

どうしてですか?

+0

申し訳ありませんが、私はあなたの質問を理解していません。テーブルに列を追加する方法と、「メッセージ1781を取得する理由」という2つの個別の質問をしていますか? –

+0

はい、どこに問題がありますか? 1つではなく2つの質問は、大丈夫ではないですか? –

答えて

0

エラーメッセージは、以前にその列に割り当てられた既定値が存在していたことを示しています。また :

ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [DF_TableName_id] DEFAULT (newid()) FOR [id] 

は、新しい列を追加するための構文ではありません - これは、列[ID]にNEWID()のデフォルト値を追加することです。 列を追加するには、this steps(内部に例がある)に従う必要があります。 SQL Serverは手動で追加した行の新しい列のセットアップ設定をどのように知っていますか?それは、あなたが望むようにそれらを定義し、構文が正しいかどうかを受け入れるか、スクリプト解析プロセスの間にそうでなければエラーを受け入れることができます(SSMSの[ctrl] + [F5]で行うことができます)。

関連する問題