2024年1月22日 星期一

[研究]T-SQL, 用 INSERT INTO SELECT 複製資料表,來源 和目的 的 ID 欄位是 auto increment

[研究]T-SQL, 用  INSERT INTO SELECT 複製資料表,來源 和目的 的 ID 欄位是 auto increment

2024-01-22

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

複製資料表有兩種常見的方法:

  • SELECT INTO:

使用 SELECT INTO 語句可以將一個表的內容複製到一個新的表。這種方法不僅複製資料,還可以複製結構(包括索引、約束等)。

SELECT * 

INTO NewTable  

FROM OldTable;

在這個例子中,NewTable 是新建的表,OldTable 是要複製的表。這種方法還可以用來在不同的資料庫中進行資料的複製。

  • INSERT INTO SELECT:

使用 INSERT INTO SELECT 語句也可以實現資料表的複製。這種方法比較靈活,可以選擇性地複製部分欄位,同時還可以進行一些轉換。

INSERT INTO NewTable (Column1, Column2, ...)

SELECT Column1, Column2, ...

FROM OldTable;

在這個例子中,你可以指定要複製的欄位,同時還可以對資料進行一些處理。

這兩種方法都有各自的使用場景,選擇其中一種取決於你的需求。如果你希望快速且簡單地複製整個表,SELECT INTO 可能更適合。如果你需要更多的靈活性,並且希望自定義複製的內容,那麼 INSERT INTO SELECT 可能是更好的選擇。

********************************************************************************

T-SQL, 用  INSERT INTO SELECT 複製資料表,來源 和目的 的 ID 欄位是 auto increment

ChatGPT


-- 允許目的表的 IDENTITY_INSERT
SET IDENTITY_INSERT DestinationTable ON;

-- 執行 INSERT INTO SELECT,並指定列
INSERT INTO DestinationTable (ID, OtherColumn1, OtherColumn2, ...)
SELECT ID, OtherColumn1, OtherColumn2, ...
FROM SourceTable;

-- 禁用目的表的 IDENTITY_INSERT
SET IDENTITY_INSERT DestinationTable OFF;

********************************************************************************

用 SELECT INTO 複製資料表時,目的資料表有新欄位 ID,是 auto increment

-- 使用 SELECT INTO,同時指定 ID 列的值為來源表的 ID 列值
SELECT ID = IDENTITY(INT, 1, 1), OtherColumn1, OtherColumn2, ...
INTO DestinationTable
FROM SourceTable;

-- 或者如果表格已經存在,你也可以使用 ALTER TABLE
-- 來源有,目的也會有,不用做
-- ALTER TABLE YourTable ADD YourColumn INT IDENTITY(1,1);

-- 在現有表格上添加主鍵約束
-- 來源有,目的不會有,要做
ALTER TABLE YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY (YourColumn);

********************************************************************************

用 SELECT INTO 複製資料表時,來源資料表和目的資料表都有欄位 ID,是 auto increment

-- 使用 SELECT INTO,同時指定 ID 列的值為來源表的 ID 列值
SELECT Column1, Column2, ...
INTO DestinationTable
FROM SourceTable;

-- 或者如果表格已經存在,你也可以使用 ALTER TABLE
-- 來源有,目的也會有,不用做
-- ALTER TABLE YourTable ADD Column1 INT IDENTITY(1,1);

-- 在現有表格上添加主鍵約束
-- 來源有,目的不會有,要做
ALTER TABLE DestinationTable ADD CONSTRAINT PK_DestinationTable PRIMARY KEY (Column1);

(完)

相關

沒有留言:

張貼留言