2017-06-06 58 views
0

我有2個表corporatecorporate_copy。最初它們在結構上是相同的,但人們開始在corporate中添加新列,並且忘記了corporate_copy修改表結構以匹配副本表

在應用程序的某處有較少使用的功能,將corporate中的數據複製到corporate_copy,並且在沒有人注意的情況下保持失敗。現在我必須添加28列(具有相同類型,長度和限制等的課程......)。

我知道這可以在一個ALTER TABLE聲明中完成,但我仍然認爲這是一項冗長的任務。

通過保持數據並在新添加的列中添加默認值,我們是否有任何奢侈品可以使複製表與主表相同?

我在問很多,但有什麼這樣的嗎?

+0

你想相同的數據以及在複製表? –

+0

數據不一樣,結構相同 – Imad

回答

1
--Generate a dynamic query which contain all the missing column list and Execute it 
--for eg I tried Something 

    BEGIN TRAN 

    DECLARE @SqlSelect NVARCHAR(MAX),@ColumnDeclaration VARCHAR(2000) 

    SELECT DISTINCT ' '+COLUMN_NAME+' '+ DATA_TYPE +' '+ISNULL(CONVERT(NVARCHAR(10), CHARACTER_MAXIMUM_LENGTH),'')+' 'Missing_Column INTO #T FROM INFORMATION_SCHEMA.COLUMNS a 
    WHERE a.column_name not in (SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS b 
    WHERE b.table_name in ('Corporate_Copy')) 
    and a.table_name in ('Corporate') 



    SELECT @ColumnDeclaration=STUFF((
           SELECT ', ' + Missing_Column 
           FROM #T 
           FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(max)'), 1, 1, '') 

    SET @SqlSelect=' ALTER TABLE Corporate_Copy Add'+ @ColumnDeclaration + ');' 
    PRINT @SqlSelect 


    ROLLBACK TRAN 
+0

完美,只需要添加約束,我會做。謝謝:) – Imad

+0

@Imad歡迎兄弟 –

0

您可以使用SQL Server數據工具(免費)中的模式比較來自動生成更改腳本。

但如果這只是一個副本,你可以只運行這個命令:

DROP TABLE Corporate_Copy; 

SELECT * 
INTO Corporate_Copy 
FROM Corporate; 

目前尚不清楚是否真的需要在副本中保存的數據。如果是這樣,它不是一個副本嗎?

+0

有疑問。我們可以在主表(對象)中使用'into'嗎? – Coder1991

+0

我正在複製基於條件的行而不是整個表,並且此語句將失敗,因爲兩個表現在具有不同的列。 – Imad

+0

@ Coder1991我不知道你的意思是「主表(物體)」。 –

0

從SQL-服務器2015年,您可以使用下面的查詢,提取2分表間的所有不同的列:

select distinct a.* from INFORMATION_SCHEMA.COLUMNS a 
where a.column_name not in (select column_name from INFORMATION_SCHEMA.COLUMNS b 
where b.table_name in ('tbl_A')) 
and a.table_name in ('tbl_B') 
order by a.column_name 

輸出給你足夠的信息來創建一個簡單的腳本來添加這些缺少列:

enter image description here

對於〔實施例:

Alter table tbl_A ADD res.Column_Name res.Data_Type .... 
+0

我使用ms excel做了它。但questiion是不同的。我想在副本中添加這些列。 – Imad

0

這應該使用SELECT INTO,例如下面的SQL語句可以創建企業備份副本:

SELECT * INTO corporate_copy 
FROM corporate ; 
0
  1. 產生SSMS CREATE腳本(桌子上單擊鼠標右鍵,然後選擇「腳本表作爲.. 。「)
  2. 刪除所有已存在的內容。通常他們是在開始時,這是一個簡單的
  3. 變化CREATEALTER ... ADD