新しいテーブルの列の特定の通常の位置にマイクロソフトマイクロソフトSQLサーバー

StackOverflow https://stackoverflow.com/questions/769828

質問

することはできるカラムのテーブルに特定の通常の位置にマイクロソフトマイクロソフトSQLサーバー?

例えば、テーブルを常にCreatedOn,CreatedBy,LastModifiedOn,LastModifiedBy列の最後に"完了"の各テーブル定義?私は新しい列の立ちSSMS上これらの列を

ていただく場合スクリプティングすべてのデータベースの変更があるので、この順序でテーブルの最後に?

対ん研究所炎戦場合はまた建物ってのはあれですからねしたい場合についてスレッドが低下すると、"わらびもち"をここでができない生活を送っていると:

http://www.developersdex.com/sql/message.asp?p=581&r=5014513

役に立ちましたか?

解決

あなたは、元のテーブルのスキーマを反映していますがたい列の順序で、その後、一時に、元の内容をコピーし、一時テーブルを作成する必要があります。オリジナルを削除し、一時の名前を変更します。

これは、SQL Management Studioのは、舞台裏で何をするかです。

スキーマの同期ツールを使用すると、自動的にこれらのスクリプトを生成することができます。

他のヒント

SQL Serverの管理Studioに移動し、「デザイン」、既存のテーブル。真ん中の列を挿入変更スクリプトを生成し、右側の空の領域をクリックし、を選択し...

これは、作成したスクリプトを見てください。それは基本的に、元のテーブルからデータを挿入し、適切な列の順序で一時テーブルを作成し、元のテーブルを削除し、一時テーブルの名前を変更します。これは、あなたがする必要がありますおそらく何でます。

 loading=

"ここに画像の説明を入力します。

また、変更スクリプトの作成を可能にするには、このオプションをオフにする必要があるかもしれません。

 loading=

"ここに画像の説明を入力します。

の答えすることは技術的に可能であるが、ましても頭の痛いうことは出来ませんので長時間を実行します。

一:作成/コピー/Drop/名前の変更

これは実際にどのSQLサーバーは、グラフィカルインターフェイス:以下に例を示しますのスクリプトで生成および実行をクリックすると、"保存"ボタンを加えたものを新しい列の最初に表示します。

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_SomeTable
    (
    MyNewColumn int NOT NULL,
    OriginalIntColumn int NULL,
    OriginalVarcharColumn varchar(100) NULL
    )  ON [PRIMARY]
     TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON
GO
IF EXISTS(SELECT * FROM dbo.SomeTable)
     EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF
GO
DROP TABLE dbo.SomeTable
GO
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT' 
GO

GO
COMMIT

二:列の追加/変更/ドカラム/名前の変更

この方法に基づのコピーを既存のテーブルのヘッダに追加したいの"の新しいカラムデータを転送する新しいカラム、その下の"原名を変更したいのが新しくなりました。この遊びを爆任意の指数や制約をいいのですrepointします。で技術的には可能ですが、再度時間がかかるの両方の開発および実行します。

CREATE TABLE MyTest (a int, b int, d int, e int)

INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)

SELECT * FROM MyTest -- your current table

ALTER TABLE MyTest ADD c int -- add a new column
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move
ALTER TABLE MyTest ADD e_new int

UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns

ALTER TABLE MyTest DROP COLUMN d -- remove the originals
ALTER TABLE MyTest DROP COLUMN e

EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns
EXEC SP_RENAME 'MyTest.e_new', 'e';

SELECT * FROM MyTest 

DROP TABLE MyTest -- clean up the sample

三:ライブで

この汗反する私の意味での注文---でも時には、それだけでな価値の入れ替え.

私の知る限りでは、列の順序を変更する方法は知られていません。舞台裏では、SQL Management Studioをホセバシリオが言ったことありません。あなたは大きなテーブルを持っている場合と、この方法のように、列の順序を変更することは非現実的である。

あなたは、「ビュー」を使用することができます。 SQLビューを使用すると、テーブルの列の変更によって影響を受ける取得せずに、好きな順序を使用することができます。

の投資を維持しながら、生産性を2013年までこす自動的に.

追加の列をテーブルとにかくおものであり、そのコミットへのご変更の投資を維持しながら、生産性を.から開くことができるテーブルのsqlファイルをVisual Studioおよび手順に列のSQLスクリプトの作成.その後更新することができますの目標を利用したデータベースのVSのスキーマの比較ツールこのツール>SQLサーバー>新しいスキーマと比較しました。を選択データベースプロジェクトとしてのソースデータベースにしたい更新しています。比較を選択し、テーブルのスクリプトです。VSンドの追加ます。すべてのデータを安全になり、指数です。

汚いとシンプル。
CSVファイルへのエクスポートテーブル。
所望の位置に新しいデータを挿入します。
表を削除します。
目的の列仕様に新しいテーブルを作成します。
新しいテーブルにcsvファイルから列をロードします。

私はシンプルだと思う何が列ALTER TABLEのTABLE1のADDを追加することです。..してからのような選択からtmp_table1のようなTMP表を作成します SELECT col1,col2,col5,col3,col4 into tmp_table1 from table1; のの その後、TABLE1をドロップしてTABLE1にtmp_table1の名前を変更し、それはそれです。私はそれが誰かを助けることを願っています。

私は、スレッドがまだアクティブであるかどうかわかりません。私は、MySQLデータベースと同じクエリを持っていました。右の表をクリックすると「ALTER」自動以下のコードを生成し選択します。サンプルてSakila DBから提供さ、それが働きました。

キーワード「」の後、あなたの新しい列を配置し、使用したいの後に列をちょうど見つけます
ALTER TABLE `sakila`.`actor` 
CHANGE COLUMN `middle_name` `middle_name` VARCHAR(50) NULL DEFAULT NULL AFTER `first_name`; 

一時テーブル内のすべての列を選択し、あなたが望む新しい列を持つ新しいテーブルを作成  古いテーブルをドロップし、一時テーブルからすべての列を選択して、リオーダー列で新しい挿入。そして、データが失われずに

select * FROM TEMP
select * from originaltbl
select * from #Stagintbl 



declare @ColumnName nvarchar(max);
set @ColumnName=(select
   distinct  
    stuff((
        select ',' + a.COLUMN_NAME
        from (select Column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='originaltbl') a

        for xml path('')
    ),1,1,'') as ColumnName)

declare @Sqlquery nvarchar(max)
set @Sqlquery='select '+@ColumnName+' from  #Stagintbl'+'';
Insert into originaltbl
Execute(@Sqlquery)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top