我有一個SQL-表是eache線由某種Virtuel-TABEL的的辛格運河值查詢 - 意味着真正的existig SQL-表看起來是這樣的:動態「INSERT INTO」與用戶定義類型
-----------------------------------------
|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表存儲像第一個是,有圍繞核心數據更大量的信息的原因......就像誰寫數據......什麼時候寫入數據......從哪個時間開始數據是重要的螞蟻......所以有很多不同的變體,它們決定了我用第一張表格生成第二張表格的哪一行。
我在SQL-Server上創建了一個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
但是當我運行程序時,我得到了一個錯誤,這意味着我必須添加一個參數「READONLY」到「@xsecondTable」...
我認爲問題是,sp_executesql可以使用變量作爲輸入或outup ...但我不舒服,如果它的possiple得到這個用戶定義表類型進入這個過程...
有人任何想法如何讓這段代碼運行?
非常感謝你
我知道有些exampels其中用戶定義類tabletypes使用蒙山這個功能......但他們都標有隻讀的,只是做一些SELECT ... – user2111880 2013-02-27 13:35:53
哪些SQL服務器你使用的是哪個版本? – Arion 2013-02-27 13:41:49
我使用SQL-Server版本2012 – user2111880 2013-04-03 08:03:30