アレルギー対策、自宅でできる効果的な方法とは?

よろしくお願いします。
SQLServer2005についての質問です。

サーバA(DBサーバ)、サーバB(DBサーバ)が存在しています。

サーバAとサーバBのテーブルレイアウトを効率よく正確に
比較する方法を教えてください。
(差分を把握したい)

どうぞよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

>手元のPC環境では「テーブル」という項目がありませんでしたが、


サーバ名 -> システムデータベース -> msdb で試したからでしょうか。

そうですね。どうも、利用者側が作成したテーブルしか表示しない
みたいなので、msdbだと、システム系のテーブルしかないと
思いますので、表示されなかったんだと思います。
ご確認下さい。
    • good
    • 0
この回答へのお礼

昨年中は、大変お世話になりました。
お礼の書き込みがまだであったことに気づきました、、。
申し訳ありませんでした。

そもそもの目的は達成したのですが、もともとDBをあまり
知らなかったので、年末/年始に勉強していました。

また何かありましたらよろしくお願いいたします。

お礼日時:2008/01/06 20:43

了解しました。



■比較ツールについて

ちなみに、Microsoft Windows SDK for Visual Studio
または、Visual Studio(バージョンは何でも良い)
はインストールされていますか?もしくは、インストールは
認められていますか?
(できれば、6.0, 2002, 2003, 2005)

また、SDKは、マイクロソフトが開発者用のツールという位置づけ
で作ったものですので、なんとか会社側に許可を頂き、
もしインストールしていなければ、是非インストールして頂くのがいいでしょう。
(フリーソフトという位置づけではないので、どんなに厳しい
企業でもマイクロソフト製品ということでSDKぐらいはインストール
させてくれると思います。貴方様がきちんと説明できれば、Noという企業はないはずです。)

もし、SDKをインストールされていなければ、

http://www.microsoft.com/downloads/details.aspx? …

から入手するか、Visual Studio 6.0以降をお持ちであれば、
インストールメディアから、SDKだけをインストールしてください。

インストールしたSDKには、WinDiffというテキストファイルを
比較するツールがありますので、こいつを使ってテーブルを比較します。

■SQL Server Management Studio の Service Pack

さて、WinDiffで何を比較するかというと、
SQL Server Management Studio Express Editionを
使って比較元、比較先のDBに対して、*.sqlファイルを作成
してあげます。

ます、SQL Server Management Studio Express Editionで
*.sqlを生成させるには、SQL Server Service Pack 2 (SP2)を
インストールする必要があります。
(理由:テーブルレイアウト構成を*.sql形式で出力できる機能を強化するため)

http://www.microsoft.com/downloads/details.aspx? …

既に適用済みであればOKですが、適用していない場合は
適用してください。
Express Editionのインストールをしているぐらいなので、
SP2もフリーソフトだからダメということはないと思いますが、
もし、企業方針で勝手にSPをインストールできない場合は、
別のやり方を考えます。

■*.sql ファイルの生成方法

SQL Server 2005 SP2 をインストールしたら、
*.sqlファイルを作成します。

*.sqlファイルの作り方ですが、
SQL Server Management Studio Express Editionで、
サーバ名 -> 比較元DB名を右Clickし、[タスク]->[スクリプト作成]
を選択します。

すると「スクリプト作成ウィザード」というのが立ち上がりますので、
ウィザード内容に従い、*.sqlファイルを生成していきます。

途中で、「オブジェクトの種類の選択」という画面が現れますので、
そこで、「テーブル」というチェックボックスをONにして
[次へ]ボタンで画面を進めて下さい。

また、[テーブルの選択]という画面も表示されますので、
[すべて選択]を押して、[次へ]ボタンで画面を進めて下さい。

さらに、「出力オプション」という画面が表示されましたら、
「スクリプトをファイルに保存」を選択し、[完了]ボタンを
押して、比較元のDBにあるテーブルをCREATE文にして
*.sqlファイルをご自身がわかりやすい場所に保存します。

同じ要領で、比較先についても同じように実行します。
(比較元と比較先で、*.sqlファイルがぶつからないように保存します)

■比較方法

後は、Microsoft Windows SDK for Visual Studioにある
WinDiffというツールを使って、比較元の*.sqlファイルと
比較先の*.sqlファイルを比較します。

WinDiffの使い方は、[File]メニューの[Compare File]を
選択し、比較元の*.sql ファイルと比較先の*.sqlファイルを
選択すれば、比較できます。
両者に違いがあれば、色で教えてくれますので、色が違う部分だけ
を抜き出していけば、少しは楽に比較ができると思います。

# WinDiff については、 http://itpro.nikkeibp.co.jp/members/ITPro/ITBASI …
にも、概要が記載されているのでご覧下さい。

# Excelにまとめる部分については、1つ1つまとめていくか
 VBAでマクロを作るのも手です。

■最後に
SQL Server 2005 Express Edition も事実上、フリーソフトですよ!
先日私が紹介したフリーソフトはダメなのに、
SQL Server 2005 Express EditionはインストールOKなのか
その辺りが良く見えません。
テーブル比較に無駄な工数を裂くぐらいであれば、
先日私が紹介したフリーソフトで説明がつくと思うんですが...
その点だけは、理解しかねるところです。
    • good
    • 1
この回答へのお礼

ご丁寧なアドバイスありがとうございます。
自分のPCへインストールしているのは「Microsoft SQL Server 2005 Express Edition
with Advanced Services Service Pack 2」ですのでSP2が適用されています。
しかし、実際のサーバはSP2未適用であり今後SP2を適用することはできません(企業方針)。

■SDKについて
>ちなみに、Microsoft Windows SDK for Visual Studio
>または、Visual Studio(バージョンは何でも良い)
インストールしていないのでご紹介くださったページからダウンロードしようと
し、リンクを辿り、下記をすべてダウンロードしようとしていますが、
SDKについてよく知らないので確認中です。
http://www.microsoft.com/downloads/details.aspx? …


■*.sql ファイルの生成方法について
すみません、この操作のことを仰っていたのですね。
ありがとうございます、判りました。

>そこで、「テーブル」というチェックボックスをONにして
手元のPC環境では「テーブル」という項目がありませんでしたが、
サーバ名 -> システムデータベース -> msdb で試したからでしょうか。
次回サーバを触れる際に、実機で確認してみます。


■フリーソフトについて
言葉の定義が曖昧なのだと思います。申し訳ございません。
無償であっても、Microsoftから提供されているソフト類は、自分のPC
にインストールしてもあまり会社から指摘は受けません。

お礼日時:2007/08/06 01:40

申し訳ないのですが、まだ私が確認したいことの趣旨をご理解頂けていないようなので、言い方を変えます。



フリーソフトについては、了解しましたが、
使用が許されているソフト、現在、ご自身のPCにインストールされているソフト類を可能な限り教えて頂けませんか?
使えるソフトによって、回答方法もかわります!

また、上記とは別に、SQL Server Management Studioをインストールしていると思いますが、正確なエディション名を教えて下さい。
エディションによって、アドバイス方法が変わりますので、
正確に教えて下さい。

この回答への補足

補足要求ありがとうございます。

趣旨を理解できず、すみません。

基本的に、フリーソフトが使用禁止ということになり、
許可されているソフトはそれ以外になります。
また、現在自分のPCへインストールしているソフトは、
Microsoft Office 2003(Excel,Word,Powerpoint)と、
自分のPCでもSQLを勉強できるよう、
SQL Server 2005 Express Edtion をインストールしています。

サーバに入っているSQL Serve 2005 のエディションは、
Enterprise になります。

他、足りないことはありますでしょうか。

補足日時:2007/08/05 22:55
    • good
    • 0

以前の回答にも書きましたが、*.sql ファイルを一括出力させ、


出力させたテキストファイルをDIFFツールで比較というのは
やってみましたか?それともできなかったのでしょうか?

SQL Server Management Studio がインストールされていないとか、
SQL Server Management Studioの使い方がわからないとか
でしょうか?
(状況によって、回答内容が変わってきますので、
もう少し、状況を細かく教えて下さい)

>フリーソフトは使用できないのです。

「SQL Server Compare」という比較ツール(フリーソフト)は、
別にDBサーバにインストールして比較させるのではなく、
ご自身のPCにインストールしても比較可能ですが、
ご自身のPC(ローカル)ですら、フリーソフトのインストールを
禁じられているのでしょうか?

もしローカルPCですら、ダメということであれば、
今、手持ち(ご自身のPCにインストールされている)ソフトを
使って比較を行うしかありませんので、どんなものがソフト類が
インストールされているかによってもアドバイス方法は変わります。
(例:SQL Server Management Studio, Visual Studio .NET 、
Excel、Access 等)

何がOKで、何がNGなのかによって、回答方法が変わりますので、
詳細をもう少し詳しくご教授頂けると有難いです。
(できるだけ、お力になりたいと思いますので)
よろしくお願いします。
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみません。
自分でいろいろと試行錯誤してみました。

>、*.sql ファイルを一括出力させ、
実は、これのやりかたが判らないです。

比較は、「現場で使えるSQL」という本から SP_TABLES と
SP_COLUMNS というのを見つけて実行し、出力結果をExcelで
表にして行いました。
しかし、Excel上でいろいろと手作業もあり、
けっして効率の良いものではないかな?と思っています。

フリーソフトは、ローカル(自分のPC)であれば、必要であれば
可能ですが原則禁止です。
(フリーソフトの比較結果をExcelなどへアウトプットして資料化する必要はあります)

お礼日時:2007/08/05 20:38

SQL Server Compare というフリーソフトがあります。

(ただし、英語)
http://www.yessoft.com/dnn/

これなら、DBをまたがったテーブルやストアドでもある程度は効率よく
比較はできると思います。

上記以外の比較方法で、確実に比較を行う方法としては、
少し手間はかかりますが、ALTER TABLE文かCREATE TABLE文の
*.sql ファイルを一括出力させ、DIFFツール等で、
*.sql ファイル同士を比較させるのも手かもしれません。
(少々面倒ですが)

ご参考になれば幸いです。

参考URL:http://sonic64.com/2005-12-15.html
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

フリーソフトは使用できないのです。

>少し手間はかかりますが、ALTER TABLE文かCREATE TABLE文の
>*.sql ファイルを一括出力させ、DIFFツール等で、
>*.sql ファイル同士を比較させるのも手かもしれません。

データベースやSQLはさっぱり判らないのですが、どのように実行すれば良いでしょうか。

お礼日時:2007/07/25 06:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブルの差分をとる結合

TableAとTableBがあります。構造は同じです。
中身は下記のようだとします。
TableA      TableB
ID VALUE     ID VALUE
1 A       3 C
2 B       4 D
3 C       

差分結合結果を下記のようにとりたいのです。
1 A
2 B
4 D

良い方法をご存じでしたら、ご教授よろしくお願い致します。

Aベストアンサー

SQL Server 2005 以降であれば、EXCEPT が使えるので、TableA - TableB と TableB - TableA の結果を UNION してやれば良いかと。
http://codezine.jp/article/detail/1304?p=2

例) --------------------------------------------------------------
(SELECT * FROM TableA
EXCEPT
SELECT * FROM TableB)
UNION ALL
(SELECT * FROM TableB
EXCEPT
SELECT * FROM TableA);
------------------------------------------------------------------

EXCEPT が使えないバージョンの場合は、 NOT EXISTS を使って差分を抽出してやれば良いでしょう。

例) --------------------------------------------------------------
SELECT * FROM TableA
WHERE NOT EXISTS (
SELECT 'X' FROM TableB
WHERE TableA.ID = TableB.ID AND TableA.VALUE = TableB.VALUE
)
UNION ALL
SELECT * FROM TableB
WHERE NOT EXISTS (
SELECT 'X' FROM TableA
WHERE TableA.ID = TableB.ID AND TableA.VALUE = TableB.VALUE
)
------------------------------------------------------------------

SQL Server 2005 以降であれば、EXCEPT が使えるので、TableA - TableB と TableB - TableA の結果を UNION してやれば良いかと。
http://codezine.jp/article/detail/1304?p=2

例) --------------------------------------------------------------
(SELECT * FROM TableA
EXCEPT
SELECT * FROM TableB)
UNION ALL
(SELECT * FROM TableB
EXCEPT
SELECT * FROM TableA);
------------------------------------------------------------------

EXCEPT が使えないバージョンの場合は、 NOT ...続きを読む

QSQLで違うテーブルの値を比較して値に差があるレコードを抽出したいので

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu2002/07/05
XXXXXXX XX1takeshiokada2005/07/15
XXXXXXX XX1kamoshu1857/09/25
WWCWWCW WW2waowao2008/10/22
DDDDDDD DD1uihhh2006/06/30
DDDDDDD DD1jojoj x5xx1999/09/09
DDDDDDD DD1momohara2005/03/07
DDDDDDD DD1itaiu-2003/12/22
DDDDDDD DD1komanogoal2007/04/26
GGGGGGG GX9 damerecord2009/11/14
FFFFFFF USJ ikitai1995/08/15
FFFFFFF USJ sstebuspi2004/01/05
FFFFFFF USJ bbpp2009/08/23

A1とB1は主キー、A2とB2は副キーです。
Aテーブルの「A4」カラムにはBテーブルのレコード数を持っています。(主キー、副キーが同じものの)
しかし、よくよく見るとAテーブルの「GGGGGGG」のA4には「2」のはずなのにBテーブルには実際にレコードは1つしかありません。
こういう状態になってしまっているのを割り出したいのですがどのようにA4とBテーブルで数があってないものを抽出できるでしょうか。
よろしくお願いいたします。

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu200...続きを読む

Aベストアンサー

SELECT A.* FROM Aテーブル A
INNER JOIN
TABLE(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2) B
ON A.A1=B.B1 AND A.A2=B.B2
AND A.A4<>B.SU

または

WITH B(B1,B2,SU) AS
(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2)
SELECT A.* FROM Aテーブル A
INNER JOIN B ON A.A1=B.B1
AND A.A2=B.B2 AND A.A4<>B.SU

こんなのでどうでしょうか?
後者の方が標準的(他のDBシステムでも
使える可能性が高い)かと思います。

QSQLサーバから、項目の属性(型)を取得したいのですが・・・

SQLサーバからテーブルの項目名、属性(型)を取得するには、どのように
クエリを組めば良いのでしょうか?

Aベストアンサー

2つ前の質問に書いたのと一緒ですが。。
基本的にsys.objects, sys.columnsというシステムビューを使います。

select object_name(object_id),name,type_name(user_type_id) from sys.columns c
where object_id=object_id('テーブル名')

Q2つのテーブルから条件に一致しないデータ抽出

2つのテーブルから条件に一致しない行のみ抜き出しCSV
か他のテーブルに抜き出す処理を作ろうと思っています。

そこで質問なのですが、以下の2つのテーブルから
条件に一致しないコードのみ抜き出すSQL文などありますか?

-----------------------------------------
マスターテーブル
コード、ネーム1、ネーム2、店コード
1、あ、い、6
2、う、え、8
3、お、か、4
4、き、く、2


店コードテーブル
店コード、店区分
1、スーパー
2、コンビニ
3、デパート
4、ホームセンター
------------------------------------------

条件は、マスターテーブルの店コードが店コードテーブルに存在
しないデータのみ抽出です。

抽出結果は、以下の様にしたいです。
1、あ、い、6
2、う、え、8

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

わかりずらい質問ですがよろしくお願いします。

2つのテーブルから条件に一致しない行のみ抜き出しCSV
か他のテーブルに抜き出す処理を作ろうと思っています。

そこで質問なのですが、以下の2つのテーブルから
条件に一致しないコードのみ抜き出すSQL文などありますか?

-----------------------------------------
マスターテーブル
コード、ネーム1、ネーム2、店コード
1、あ、い、6
2、う、え、8
3、お、か、4
4、き、く、2


店コードテーブル
店コード、店区分
1、スーパー
2、コンビニ
3、デパート
4、ホームセンタ...続きを読む

Aベストアンサー

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

店コードが一致するレコードを抽出しているのですね。
はい、大丈夫です。
もっとも単純に、分かりやすい式を書くのであれば

この条件否定なので
left outer join で結合して、結合できなかったデータ、
つまり、店がNullのデータを取れば抽出できます。

SELECT *
FROM マスターテーブル AS M left outer join 店コードテーブル AS S
ON M.店コード = S.店コード
where S.店コード is null

または、
SELECT *
FROM マスターテーブル as M
where M.店コード not in ( select 店コード from 店コードテーブル)

等でいけるでしょう。

ただ、参考URLにもありますように、
is null とか not in は遅いです。(Indexで見れなくなるので)
大量データを扱うような場合や、速度が求められるような場合は
別途クエリを検討しましょう。

参考URL:http://www.geocities.jp/mickindex/database/db_optimize.html

このような考え大丈夫でしょうか?
SELECT *
FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S
ON M.店コード = S.店コード

店コードが一致するレコードを抽出しているのですね。
はい、大丈夫です。
もっとも単純に、分かりやすい式を書くのであれば

この条件否定なので
left outer join で結合して、結合できなかったデータ、
つまり、店がNullのデータを取れば抽出できます。

SELECT *
FROM マスターテーブル AS M left outer join 店コードテーブル AS S
ON M.店コード = S....続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qテーブルの参照方法

よろしくお願いします。
SQLServer2005についての質問です。
(OS:Windows Server 2003 SP1)

サーバが2台あり、どちらにもSQL Server 2005 がインストールされ
ています。一方のサーバ(サーバA)に存在するテーブルを他方の
サーバ(サーバB)からTSQLで参照するにはどのようにすれば良い
でしょうか?

各サーバで必要な設定と、実行するTSQLのイメージを教えてください。

基本的なことかもしれませんが、調べてもさっぱり判らず困っています。
(sqlcmdを使うようだというところはなんとなく判りました)
どうぞよろしくお願い致します。

Aベストアンサー

リンクサーバを構築しないでもできますよ。
Management Studioから、リンク元のサーバを右Clickし、
サーバのプロパティを表示させます。
そこに、「接続」というタブがあるんで、
「このサーバへのリモート接続を許可する」をCheckONにしておく
ことと、

SQL Serverをインストールすると、
[構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を
選んで、SQL Server 2005 Surface Area Configuration を
起動させます。

[リモート接続]というタブがあるので
[ローカル接続および[リモート接続]を選択し、
適切なTCPプロトコルを設定し、適用させて、SQL Serverのサービスを
再起動すれば可能です。

細かい点としては、SQL Server Browser Serviceの有効化や
SQL Serverのファイアウォール設定を行う必要があります。

詳しいことは、ご確認頂いていたサイトの日本語版が
http://support.microsoft.com/kb/914277/ja-jp
にもありますので、少しはわかりやすいかと思います。

なお、設定後のSQLアクセスは、
select * from [サーバAのサーバ名].[DB名].[スキーマ名(dbo等)].[テーブル名]
で接続可能です。

よろしくお願いします。

参考URL:http://support.microsoft.com/kb/914277/ja-jp

リンクサーバを構築しないでもできますよ。
Management Studioから、リンク元のサーバを右Clickし、
サーバのプロパティを表示させます。
そこに、「接続」というタブがあるんで、
「このサーバへのリモート接続を許可する」をCheckONにしておく
ことと、

SQL Serverをインストールすると、
[構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を
選んで、SQL Server 2005 Surface Area Configuration を
起動させます。

[リモー...続きを読む

QSQL文について(片方のテーブルに存在しないレコード抽出)

以下のような2つのテーブルがあったとして、
2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、
片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを
一文で書くにはどうすればいいのでしょうか?

<店テーブル>
店コード住所・・・(その他、基本情報)
1aaa
2bbb
3ccc

<販売テーブル>
店コード販売品目・・・(その他、販売数など)
1xxx
3zzz

Aベストアンサー

オプティマイザ次第だけど、NOT-INは、あまりお勧めでない。
外部結合も索引があっても有効に使われないので、お勧めでない。

select * from A where not exists(select 1 from B where A.店コード=B.店コード);

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

Qカラム情報取得方法

テーブル内のカラム情報を取得するにはどのようなSQLを作ればよいのでしょうか?
欲しい情報は「カラム名・主キーかどうか・データ型・桁数・NULLを許容かどうか」の5つとなります。

SQL Server は2005と2008を使用していて、どちらでも扱えるSQLがあると助かります。

どうぞ宜しくお願いいたします。

Aベストアンサー

昔、以下のSQLを作ったことがあります。2005では問題なかったです。
私の用はこれで足りたので必要に応じて修正してみてください。

SELECT
b.name as "Table名",
a.name as "カラム名",
c.name as "データ型",
a.column_id as "カラム順",
a.max_length as "データ長",
a.precision,
a.scale ,
case when a.is_nullable =0 then 'Null不可'
else 'NUll可' end as "NULL",
case when a.is_identity =0 then '×'
else '○' end as "オートナンバー",
case when a.default_object_id = 0 then '×'
else d.definition end as 'デフォルト値',
case when f.index_column_id is not null AND e.is_primary_key = 1 then 'PK'
else '×' end as 'PK'
FROM sys.columns as a
Left outer JOIN sys.objects as b
ON a.object_id = b.object_id
Left outer JOIN sys.types as c
ON a.system_type_id = c.system_type_id
Left outer JOIN sys.default_constraints as d
ON a.default_object_id = d.object_id
Left outer JOIN sys.indexes as e
ON a.object_id = e.object_id
AND e.is_primary_key = 1
Left outer JOIN sys.index_columns as f
ON a.object_id = f.object_id
AND a.column_id = f.column_id
WHERE b.type = 'U'
AND c.name != 'sysname'
ORDER BY b.name,a.column_id

昔、以下のSQLを作ったことがあります。2005では問題なかったです。
私の用はこれで足りたので必要に応じて修正してみてください。

SELECT
b.name as "Table名",
a.name as "カラム名",
c.name as "データ型",
a.column_id as "カラム順",
a.max_length as "データ長",
a.precision,
a.scale ,
case when a.is_nullable =0 then 'Null不可'
else 'NUll可' end as "NULL",
case when a.is_identity =0 then '×'
else '○' end as "オート...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報