2011-08-02 25 views
0

我有一個表,但我不知道它的列(我只知道它有「id(Uniqueidentifier)列」)。更新列名不明的表

我能得到的所有列在下面的查詢表:

DECLARE @columnNames NVARCHAR(4000) = '' 

    SELECT @columnNames += '[' + COLUMN_NAME + '] ' 
    FROM INFORMATION_SCHEMA.Columns 
    WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME NOT IN ('id') 
    ORDER BY COLUMN_NAME 

現在我想更新與另一個記錄的數據的一個記錄......

我怎樣才能做到這一點?

感謝所有...

+3

不知道你打算使用的表的列名是一個非常糟糕的主意,可能源於糟糕的設計。 – Jacob

+0

我同意,但表是動態創建在不同的客戶...我希望它是與2表一與數據和其他與字段名稱等創建...但我不得不處理這個快速 – ogun

+1

你怎麼知道哪列是哪些以及如何將這些值與其他值聯繫起來。 –

回答

1

這是怎麼了,你可以建立一個動態的sql

DECLARE @columnNames NVARCHAR(4000) 
DECLARE @idfrom int, @idto int 
DECLARE @table nvarchar(50) 
SET @table = 'MY_TABLE' 
SET @idfrom = 5 -- id you are copying from 
SET @idto = 2 -- id you are copying to 

DECLARE @sqlstring nvarchar(max) 

SELECT @columnNames = coalesce(@columnNames, 'SET ') + '[' + COLUMN_NAME + ']=t2.' + '[' + COLUMN_NAME + '],' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = @table AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

SET @sqlstring = 'update t1 ' +stuff(@columnNames, len(@columnNames),1,'') + ' 
FROM @t t1 
join @t t2 on t1.id =' + cast(@idto as varchar) + ' 
and t2.id = ' + cast(@idfrom as varchar) 

EXEC(@sqlstring) 
+0

謝謝隊友......這真的很有幫助。 – ogun

0

我想你可以創建一個「插入到表1 ......從表2中選擇..」型插入字符串,然後用sp_executesql的執行。

DECLARE @insertColumnNames NVARCHAR(4000) = '' 
DECLARE @selectColumnNames NVARCHAR(4000) = '' 

SELECT @insertcolumnNames += ',' + '[' + COLUMN_NAME + '] ' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'TABLE_1' AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

SELECT @selectcolumnNames += ',' + '[' + COLUMN_NAME + '] ' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'TABLE_2' AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

sp_executesql ('insert into TABLE_1 ('[email protected]+') select '+ @selectcolumnNames +' from TABLE_2'); 

我認爲,類似這樣的東西可以工作 (你將需要刪除多餘的,從列字符串,這是沒有測試所有,只是一個想法)

+0

好主意,但我想更新我現有的數據...如果我使用插入語句,我必須刪除現有數據... – ogun

+0

它可能更難但可以創建更新字符串插入,使用類似的方法。 –