SQL Server 2005でSQLクエリを使用してテーブルの列の順序を変更する方法
SQLクエリを使用して、テーブルの列の順序を並べ替えたい。
SQL Server 2005でSQLクエリを使用してテーブルの列の順序を変更する方法
SQLクエリを使用して、テーブルの列の順序を並べ替えたい。
回答:
できません。列の順序は、私たちが人間が気にする「化粧品」のことです-SQL Serverにとって、ほとんど常に絶対に無関係です。
列の順序を変更したときにSQL Server Management Studioがバックグラウンドで実行することは、新しいCREATE TABLE
コマンドを使用してテーブルを最初から再作成し、古いテーブルからデータをコピーしてから削除することです。
列の順序を定義するSQLコマンドはありません。
INSERT
明示的に列を指定せずに、とにかく!
「デフォルト」の順序に*を使用する代わりに、フィールドを返す順序で明示的にリストする必要があります。
元のクエリ:
select * from foobar
戻り値
foo bar
--- ---
1 2
書いて
select bar, foo from foobar
bar foo
--- ---
2 1
http://msdn.microsoft.com/en-us/library/aa337556.aspxによると
このタスクは、Transact-SQLステートメントの使用はサポートされていません。
まあ、komma8.komma1で答えられたように、create
/ copy //drop
rename を使用してそれを行うことができます
または、SQL Server Management Studioを使用できます
- では、オブジェクトエクスプローラ、列を持つテーブルを右クリックして、あなたは順序を変更し、クリックしますデザイン(版で修正を。2005 SP1またはそれ以前)
- 並べ替える列名の左側にあるボックスを選択します。(キーボードの[shift]キーまたは[ctrl]キーを押し続けると、複数の列を選択できます。)
- 列をテーブル内の別の場所にドラッグします。
次に[保存]をクリックします。このメソッドは実際にテーブルを削除して再作成するため、いくつかのエラーが発生する可能性があります。
場合は変更の追跡オプションがデータベースとテーブルのために有効になっている、あなたは、このメソッドを使用しないでください。
無効になっている場合は、[ツール]メニュー> [オプション]> [デザイナー]で、[ テーブルの再作成を必要とする変更を保存できないようにする]オプションをオフにする必要があります。「変更の保存は許可されていません」エラーが発生します。
主キーおよび外部キーの作成中に問題が発生することもあります。
上記のエラーのいずれかが発生した場合、保存は失敗し、元の列の順序が残ります。
This task cannot be performed using Transact-SQL statements.
ドキュメント内の「」の記述は間違っていました。作者を説明し、「This task is not supported using Transact-SQL statements.
」に変更するよう依頼しました。約1日前、著者は同意し、ドキュメントは修正されました。GitHubでのディスカッションをフォローできます。
これは、クエリの結果でのレコードの順序付けに関する質問に似ています..通常、正式な正解は誰も好きではありません;-)
だからここに行く:
select *
は特定の順序で列を強制的に返しません。create table' or in the
alter table add `ステートメントのいずれかで)もちろん、SQLステートメントの列の順序を変更することもできます。ただし、テーブルの物理的な列の順序を抽象化する場合は、ビューを作成できます。すなわち
CREATE TABLE myTable(
a int NULL,
b varchar(50) NULL,
c datetime NULL
);
CREATE VIEW vw_myTable
AS
SELECT c, a, b
FROM myTable;
select * from myTable;
a b c
- - -
select * from vw_myTable
c a b
- - -
これを行うには、新しいテーブルを作成し、すべてのデータをコピーし、古いテーブルを削除してから、新しいテーブルの名前を変更して古いテーブルを置き換えます。
また、新しい列をテーブルに追加し、列データごとに列をコピーし、古い列を削除してから、新しい列の名前を変更して古い列と一致させることもできます。以下の簡単な例:http : //sqlfiddle.com/#!3 / 67af4/1
CREATE TABLE TestTable (
Column1 INT,
Column2 VARCHAR(255)
);
GO
insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO
select * from TestTable;
GO
ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO
update TestTable
set Column1_NEW = Column1,
Column2_NEW = Column2;
GO
ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO
sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO
select * from TestTable;
GO
SQLServer Management Studioで:
Tools
-> Options
-> Designers
->Table and Database Designers
選択を解除しPrevent saving changes that require table re-creation
ます。
これで、テーブルを並べ替えることができます。
SQLサーバーは内部でスクリプトを作成します。新しい変更で一時テーブルを作成し、データをコピーして現在のテーブルを削除し、一時テーブルからテーブル挿入を再作成します。「変更スクリプトの生成」オプションssms 2014からそれを見つけます。このようなスクリプト。ここから:SQLクエリを使用してテーブルの列の順序を変更する方法
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_emps
(
id int NULL,
ename varchar(20) NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT'
GO
COMMIT
テーブルに十分な列がある場合は、これを試すことができます。最初に、列の優先順で新しいテーブルを作成します。
create table new as select column1,column2,column3,....columnN from table_name;
次に、dropコマンドを使用してテーブルをドロップします
drop table table_name;
新しく作成したテーブルの名前を古いテーブル名に変更します。
rename new to table_name;
テーブルを選択すると、以前のように列が再配置されます。
select * from table_name;
結局のところ、これをMS SQLで行うことはできません。最近、ルックアップテーブルから読み取るストアドプロシージャを使用して、外出先(アプリケーションの起動)でテーブルを作成しました。これらを以前に手動で作成した別のテーブルと組み合わせたビュー(同じスキーマ、データを含む)を作成すると、ビューに '' Select * UNION Select * 'を使用していたために失敗しました。同時に、ストアドプロシージャで作成したものだけを使用すれば、成功します。
結論:列の順序に依存するアプリケーションがある場合、それは本当に良いプログラミングではなく、将来的に問題が発生することは間違いありません。列はどこにでも自由に「感じる」ことができ、あらゆるデータ処理(INSERT、UPDATE、SELECT)に使用できます。
並べ替える列が最近作成されて空になっている場合は、列を削除して、正しい順序で再度追加できます。
これは私に起こり、データベースを手動で拡張して新しい機能を追加しましたが、列が抜けていたので、追加したときにシーケンスが正しくありませんでした。
ここで適切な解決策が見つからなかった後、私は次の種類のコマンドを使用してテーブルを単に修正しました。
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
注:ドロップする列にデータがない場合にのみ、これを行ってください。
列の順序は重要ではないと人々は言っています。SQL Server Management Studioの「スクリプトの生成」を定期的に使用して、データベーススキーマのテキストバージョンを作成しています。これらのスクリプト(git)を効果的にバージョン管理し、それらを比較(WinMerge)するには、互換性のあるデータベースからの出力が同じであり、強調表示されている違いが本物のデータベースの違いであることが不可欠です。
列の順序は重要です。だけでなく、一部の人にだけではなく、すべての人に!
新しい列を特定の位置に追加したいと思います。現在の列を右に移動して、新しい列を作成できます。
+---+---+---+
| A | B | C |
+---+---+---+
影響を受けるすべてのインデックスと外部キー参照を削除します。最後の列とまったく同じデータ型の新しい列を追加し、そこにデータをコピーします。
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
3番目の列のデータ型を前の列と同じ型に変更し、そこにデータをコピーします。
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
それに応じて列の名前を変更し、削除されたインデックスと外部キー参照を再作成します。
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
2番目の列のデータ型を変更します。
使用する
SELECT * FROM TABLE1
これは、テーブルのデフォルトの列順序を表示します。
列の順序を変更したい場合。
表示する列名を指定してください
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
SQLクエリを使用してこれを変更できます。列のシーケンスを変更するSQLクエリは次のとおりです。
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
特定の列の順序を設定するには、希望する順序で列ごとに選択する必要があります。選択順序は、出力での列の順序を決定します。
まずテーブル名を変更し、columnname int(5)を最初に変更します。最初に列を変更し、(tablename)の後にテーブル名を変更しますcolumnname int(5)を変更します。
例:テーブルステータスのfield_priceの後のfield_priorityの位置を変更します。
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;