SQL Serverにフォームデータを保存する必要がある状況がありますが、セットアップするたびに新しいフィールド名と長さが異なるフィールドが設定されます。例Sql Server 2005でxmlデータの動的ビューを作成できますか?
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から離れることなく)。
「ストアドプロシージャからSELECTできません」とはどういう意味ですか?なぜSPが結果セットを返さないのはなぜですか? –
さて、あなたは "SELECT first_name、last_name FROM sp_getformdata"を実行することができません - このプロセスの次の部分は分割データを取り、例のためにいくつかの方法でフォーマットするので、 "SELECT first_name +"、 "+ last_name FROM sp_getformdata" –
情報ありがとう、私は前にそのリンクを読んでいます。これらのオプションのそれぞれにはある種のペナルティがあるようですが、何十万というレコードで作業しているときはパフォーマンスが低下します。 –