2015-10-13 53 views
0

我知道我可以將行復制到同一個表中,同時通過在查詢中實際編寫所有列名稱來指定需要包含不同值的列的不同值:將數據複製到具有不同值的同一表中

INSERT INTO 
    my_table (col1, col2, col3, col4) 
SELECT 
    col1, 
    col2, 
    [value_for_col_3], 
    col4 
FROM 
    my_table; 

WHERE [value_for_col_3]是,我想的列COL3原始值。這工作正常,但在我的表包含大量列的情況下,編寫所有列名稱會很麻煩。有沒有辦法執行相同的操作,而不鍵入我的表的所有列名稱(雖然仍然能夠爲某些列指定不同的值)?

在此先感謝您的幫助。

+1

您需要單獨列出每個列。你可以使用'*'複製列,但這可能不會幫助你。 –

+0

所以沒辦法做我想做的事情? – user765368

+0

你可以寫一個動態查詢,但這會很麻煩 – JamieD77

回答

0

在這個答案中,我給出了一個基本的輪廓,而不是寫出所有的代碼,因爲你正在查看是否可以完成你想要的任務。這是一個可行的方法。

該方法是獲取除了不需要的列以外的所有列名稱的列表,然後在查詢中使用這些列名的輸出。

這顯示瞭如何選擇SQL Server中除了某些列以外的所有列,但我確信可以修改語法以在MySQL中工作。

(複製和粘貼從這裏的一個答案下面的代碼:SQL exclude a column using SELECT * [except columnA] FROM tableA?

declare @cols varchar(max), @query varchar(max); 
SELECT @cols = STUFF 
    (
     ( 
      SELECT DISTINCT '], [' + name 
      FROM sys.columns 
      where object_id = (
       select top 1 object_id from sys.objects 
       where name = 'MyTable' 
      ) 
      and name not in ('ColumnIDontWant1', 'ColumnIDontWant2') 
      FOR XML PATH('') 
     ), 1, 2, '' 
    ) + ']'; 

SELECT @query = 'select ' + @cols + ' from MyTable where'; 
EXEC (@query); 

就在SELECT語句,

SELECT @query = 'select ' + @cols + ' from MyTable where'; 

將被修改爲您INSERT INTO說法。

相關問題