プロが教えるわが家の防犯対策術!

の表を表示する命令を教えてください

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

A 回答 (3件)

>PostgreSQLを使ってます


下記でテーブルの定義構造を問い合わせることができるはずです。

select attname, atttypid, attlen
from pg_attribute
where attnum > 0
and attrelid = (select relfilenode from pg_class where relname = 'テーブル名')
order by attnum
;

この回答への補足

型名(text,serial,varchar)も出すにはどうしたらいいでしょうか?

補足日時:2005/09/14 13:56
    • good
    • 0
この回答へのお礼

ありがとうございます
入力が大変でしたが出てきました

お礼日時:2005/09/14 13:53

ストアドプロシージャでよければsp_columnsが使用できます。



例えば

  sp_columns TableA

などと実行します。

ストアドプロシージャを使いたくない場合は

  SELECT c.name, t.name
    FROM sysobjects o, syscolumns c, systypes t
    WHERE o.name = 'TableA' AND c.id = o.id AND c.type = t.type

または

  SELECT c.name, t.name
    FROM sysobjects o, syscolumns c, systypes t
    WHERE o.name = 'TableA' AND c.id = o.id AND c.xtype = t.type

のようにします。(SQL Serverのバージョンによって使いわける。)

sp_columnsの使い方やテーブルsysXXXの内容の詳細は、マニュアル・ヘルプファイルを参照してください。
    • good
    • 0
この回答へのお礼

ありがとうございます
No.1さんの方法でできました
しかし簡単なことなのに大変ですね

お礼日時:2005/09/14 13:55

SQL Server ならプロファイラを起動した状態でそれらの情報を表示してくれるアプリケーションを起動すると、そのアプリケーションが実行したSQLが表示されますよ。

この回答への補足

早速ありがとうございます

Select何とかというコマンドではないのでしょうか?
PostgreSQLを使ってます

補足日時:2005/09/14 12:56
    • good
    • 0

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

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

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

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

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

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 "オート...続きを読む

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('テーブル名')

Qsp_columnsでデータベース名を指定できません

現在、SQLServer勉強中のものです。たびたびの質問ですいません。

sp_columnsというシステムストアドプロシージャで列情報が取得できますが、@table_nameでテーブルを、@table_ownerで所有者を指定できますよね。
さらに@table_qualifierでデータベース名を指定できると思っていたのですが、これは無理なのでしょうか。

ヘルプには「SQLServerでは、この列はデータベース名をあらわします」とあるのですが、現在、接続データベース以外のデータベースに格納されているテーブルの列情報を参照しようとすると「オブジェクト修飾子の一部になるデータベース名には、現在のデータベースを指定してください。」と表示されてしまいます。

例:TestDB1に接続してTestDB2内のテーブル指定
use TestDB1
sp_columns
@table_name=TestDB2Tbl,
@table_qualifier=TestDB2

Aベストアンサー

他のシステムストアドプロシージャの心当たりはありません。

  No.1648536 質問:列名とそのデータ型
  http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648536

にあるようにsyscolumns等のシステムテーブルから自前で情報を取得するか、ODBC経由の場合は接続文字列に"DATABASE={データベース名};"を追加して任意のデータベースに接続してからテーブル情報・列情報を取得するか、あるいはOLEDB経由でデータベース情報・テーブル情報・列情報を取得するか、というところではないでしょうか。

QSQLServerで列名取得

Microsoft SQL Server2014
ManagementStudio
を Windows7 で使用しています。

テーブルのカラム(列)名を取得したくて
いろいろ調べてみましたが

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TestTable'
ORDER BY ORDINAL_POSITION

とか、

select name
from Sys.Columns
where object_id = object_id('TestTable')

を実行しても、空のデータしか表示されません。
何がまちがっているのか教えてください。

Aベストアンサー

データベースコンテキストが他のデータベース(masterとか)のままになっているのかもしれません。
 use データベース名
 go
でデータベースを切り替えてからselectしてみてください。


例:TestDatabaseデータベースの中にTestTableテーブルがある場合
 use TestDatabse
 go

 select name
 from Sys.Columns
 where object_id = object_id('TestTable')

参考URL:http://msdn.microsoft.com/ja-jp/library/ms188366.aspx

Q処理件数を非表示にしたい

ManagementStudioでストアドプロシージャの開発をしています

開発中、デバッグのためにプロシージャをコールすると、SQLの発行の度に
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
・・・

と処理件数が表示され、確認の際に邪魔で困っています。
処理件数を非表示にするにはどうすれば良いでしょうか?

また同様に、SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にできないでしょうか?

Aベストアンサー

処理件数を非表示にする方法

⇒SELECT文の前に「set nocount on」を記載すると件数は表示されません。

SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にする方法

⇒デバッグのためには表示された方が良いと思いますが、
 とりあえず…SELECT文の前に「SET NOEXEC ON」を記載するとデバッグだけ実施され、
 グリッドは表示されません。
例であげると以下のとおりです。
SET NOCOUNT ON
SET NOEXEC NO
SELECT *
FROM DB.dbo.TableName
go

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q(x 行処理されました)を表示させないのは可能か

クエリアナライザ、sqlcmdなどでselectを実行した場合、処理結果レコードの最終行の後に(x 行処理されました)が必ず表示されてしまうのですが、表示させない方法をご存じの方、ご教示いただけないでしょうか。

select結果をテキストファイル出力したものをそのままプログラムで使用したいのですが、最終レコードの後に(x 行処理されました)の行など数行が余分にあるため、毎回テキストファイルを開いて手作業で消さなくてはならず、困っております。

Aベストアンサー

処理前に
set nocount on
でいけた記憶があります。

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&Aランキング