
先日質問した「選択したフィールドだけのCSVを出力」を作り込もうとしています。
テーブル名とフィールド名を管理するテーブルを作りました。
自動的に管理テーブルのメンテナンスをしたいと考えました。
その管理テーブルとSELECT文(sysobjects.name,syscolumns.nameを取り出す)
の間で同期を取る為に、ストアドを作ろうとしているのですが解りません。
要は、管理テーブルに有ってSELECT文に無いものを管理テーブルから削除。
(フィールドが消されたか名前が変えられた時)
管理テーブルに無くてSELECT文に有るものを管理テーブルに追加。
(フィールドが追加されたか名前が変えられた時)
この二点が出来れば同期が取れると考えていますが、サブクエリーにな
ると
思うのですがうまく作れません、ご教授をお願いします。
No.2ベストアンサー
- 回答日時:
そうですか、ユーザの便宜のためのテーブルなわけですね。
SQL Server 2008でしたね。。
テーブルレイアウトがわからないので、以下でサンプルを書きますので、適当に加工してください。
CREATE TABLE テーブルレイアウト
([テーブル名][sysname],[フィールド名][sysname],[定義体名][nvarchar](50))
DECLARE @tablename sysname='テーブル1'
DECLARE @name nvarchar(50)='定義体1'
MERGE テーブルレイアウト t1
USING
(SELECT NAME FROM sys.columns
WHERE OBJECT_ID=OBJECT_ID(@tablename)) c
ON t1.テーブル名=@tablename AND t1.定義体名=@name AND c.NAME=t1.フィールド名
WHEN NOT MATCHED THEN INSERT VALUES (@tablename,c.NAME,@name)
WHEN NOT MATCHED BY SOURCE AND t1.テーブル名=@tablename AND t1.定義体名=@name THEN DELETE;
まだ、同期を取る前に別の問題で止まってます、別で質問を出しますので
こちらは一旦、締切ます。
進んで解らない場合は改めて質問をしますのでよろしくお願いします。、
No.1
- 回答日時:
その管理テーブルの目的は何ですか?
・エクスポートできる対象のテーブルを絞りたい
・エクスポートできる対象のフィールドを絞りたい
前者だけであればフィールドを管理する必要はないですよね
後者も含むのであれば、無条件にフィールドを追加・削除したらまずくないですか?
また、いつ同期を取りたいのでしょうか?
・エクスポートが要求されたとき
・テーブルが変更されたとき
通常の発想ならば、後者かなとは思いますが。。
この回答への補足
一度エクスポートした設定を覚えておいて、次に同じテーブルが
指定されたら、その設定を表示させるためです。
(前回と同じ内容で良ければ、楽にエクスポート可能です)
さらに、管理テーブルに「定義体名」というフィールドを作成し、
設定内容を登録できる様にする予定です。
「定義体名」がブランクのレコードは前回の設定の記録。
「定義体名」が入っているレコードは名前をつけて保存した記録です。
当然、同一テーブル、同一フィールードが複数存在します。
よって、フィールドの加除があれば記録されているレコードに
反映(同期)させないとそのままでは、追加された項目が選べなかったり、
無くなった項目を選んでエラーになったりします。
(実際のテーブルからフィールドが無くなったのだから、無条件に
消さないと、選べたらまずいと考えています)
同期するタイミングは CSVを選択出力する画面でテーブルが
選択されたら、同期を取った上で指定されたテーブルの
「定義体名」がブランクのレコードをリストボックスへ表示します。
また、テーブルではなく「定義体」が呼び出されたら、その時点で
対象テーブルの同期を取った上で指定された「定義体名」が入った
レコードを同様に表示させます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessレコードの追加や変更が...
-
3つの表を1つに縦に連結する
-
ツリー構造をRDBで表現するには?
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルからテーブル...
-
2つのテーブルを比較して一致し...
-
Accessでテーブルにパスワード...
-
アクセス2010 クロス集計クエ...
-
SQL: SELECT UNIONすると文字数...
-
条件付き書式に関する質問でご...
-
Windows8、Access2013でのクエリ
-
3つのテーブルの値を使いたい
-
Accessでvlookupみたいなことは...
-
FileMakerで2テーブルを(仮想的...
-
本テーブルに変更内容を反映す...
-
Access テーブル作成クエリにつ...
-
Accessクエリについて
-
アクセスのデータをエクセルに...
-
エクセルVBAで5行目からオート...
-
Excel 2019 のピボットテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessレコードの追加や変更が...
-
Accessでvlookupみたいなことは...
-
Accessでテーブルからテーブル...
-
ACCESSのSQLで数値型に変換する...
-
SQLで条件指定結合をしたいがNU...
-
2つのテーブルを比較して一致し...
-
デザインビューで、連結式 を...
-
Accessクエリでの、LIKE条件
-
ACCESSに同時アクセス(編集)を...
-
3つの表を1つに縦に連結する
-
access テーブル内のレコード...
-
INSERT時にデータ登録とmaxの発...
-
テーブルを、たとえそれが存在...
-
SQLで日付を条件に削除したい
-
Accessの追加クエリで既存のテ...
-
リンクテーブルを CopyObject ...
-
ACCESS 売上管理 価格改定につ...
-
accessでdcount使用法
-
時間の足し算
おすすめ情報