フォーム データを SQL サーバーに保存する必要がある状況がありますが、セットアップする新しいジョブごとに、フィールド名と長さが異なるさまざまなフィールドがあります。例
Job 1:
Field 1: first_name - varchar(20)
Field 2: last_name - varchar(30)
Job 2:
Field 1: first_name - varchar(15)
Field 2: middle_initial - varchar(1)
Field 3: last_name - varchar(30)
最初は、問題のフォームに正確に準拠したこのデータを格納するために別のテーブルを設定していました。しかし、このデータの動的な性質に対応するために、非常に多くのテーブル、procs、dts、ssis パッケージが毎回変更されるため、メンテナンスの悪夢につながります。
すべてのデータを xml フィールドに格納する別のソリューションを思いついたので、ほとんどの問題は解決しました。現在はこれと同様に存在します。
<Record>
<first_name>value</first_name>
<last_name>value</last_name>
</Record>
次に、このデータをテーブルから引き出すビューを作成します。
SELECT
, IsNull(data.value('(/Record/first_name)[1]', 'varchar(20)'),'') as first_name
, IsNull(data.value('(/Record/last_name)[1]', 'varchar(30)'),'') as last_name
FROM FormTable
これは以前よりもはるかに優れていますが、毎回カスタム ビューを作成する必要があることも意味します。フィールドをリストし、そのクエリを作成する何らかのタイプのテーブルを維持したいと思います。
Field Name | Field Type | Field Length
first_name | varchar | 20
last_name | varchar | 30
動的ビューを作成できないと確信しています。機能する可能性のあるオプションの 1 つは、テーブル値関数です。しかし、ここで見落としているものはありますか?この方法でデータを動的に保存できるようにするためのより良いオプションはありますか (CouchDB などの他のデータベースがこれをネイティブに行うことがわかっているため、SQL SERVER から離れることはありません)。