私はSQLテーブルを持っています。各行はある種のVirtuel-Tabelの単一の値で構成されています-実際に存在するSQLテーブルは次のようになります。
-----------------------------------------
|DataRecordset | DataField | DataValue |
-----------------------------------------
| 1 | Firstname | John |
| 1 | Lastname | Smith |
| 1 | Birthday | 18.12.1963 |
| 2 | Firstname | Jane |
| 2 | Lastname | Smith |
| 2 | Birthday | 14.06.1975 |
-----------------------------------------
そして私はこのように感じる何かを手に入れる必要があります:
-------------------------------------
| Firstname | Lastname | Birthday |
-------------------------------------
| John | Smith | 18.12.1963 |
| Jane | Smith | 14.06.1975 |
-------------------------------------
実際の既存のSQLテーブルが最初のテーブルのように格納される理由は、コアデータの周りに多くの情報があるためです...誰がデータを書き込んだか...いつデータが書き込まれたか...データが重要だったのはいつですか...したがって、最初のテーブルのどの行を使用して2番目のテーブルを生成するかを決定するさまざまな変数がたくさんあります。
SQL-Server上に2番目のテーブルのようなUser-Defined-Tabletypeを作成しました。
それから私は手順を書き始めます...
DECLARE @secondTable secondTable_Typ
DECLARE firstTable_Cursor CURSOR FOR SELECT DataRecordset, ... WHERE...lot of Text
OPEN firstTable_Cursor
FETCH NEXT FROM firstTable_Cursor
INTO @DataRecordset, @...
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT * FROM @secondTable WHERE DataRecordset= @DataRecordset)
BEGIN
私が抱えている問題...私は次のようなことをしたいので、ある種の動的クエリが必要です:
INSERT INTO @secondTable (DataRecordset, @DataField ) VALUES (@DataRecordset, @DataValue)
しかし、私はこのように変数@DataFieldを使用できません...それで私はグーグルを使用して関数sp_executesqlを見つけました...私は次のコードを書きました:
SET @sqlString = 'INSERT INTO @xsecondTable (DataRecordset, ' + @DataField + ') VALUES (@xDataRecordset, @xDataValue)'
EXEC sp_executesql @sqlString, N'@xsecondTable secondTable_Typ, @xDataRecordset smallint, @xDataValue sql_variant', @secondTable , @DataRecordset, @DataValue
しかし、プロシージャを実行すると、「@xsecondTable」にパラメータ「READONLY」を追加する必要があることを意味するエラーが発生しました。
問題は、sp_executesqlが変数を入力または出力として使用できることだと思います...しかし、このユーザー定義のテーブルタイプをこのプロシージャに取り込むことができるかどうかはわかりません...
このコードを実行する方法を誰かが考えていますか?
どうもありがとうございます