簡體   English   中英

在不指定列的情況下將數據從一個SQL Server表復制到同一數據庫中的其他表

[英]Copy Data from One SQL Server Table to Other in Same Database Without Specifying Columns

在SQL Server中存在的能力INSERT所有的數據從一個表到另一個使用下面的語句:

INSERT INTO TABLE1 SELECT * FROM TABLE2

在具有標識列的表上運行此操作時,即使我們運行了命令SET IDENTITY_INSERT TABLE1 ON ,我們也會收到錯誤:

An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON

這意味着我們必須列出INSERT中的所有列,以使其正常工作。 在我們所處的情況下,我們無權訪問列名,只能訪問我們需要復制的表的列表。 有沒有辦法解決這個限制?

您可以通過查詢數據字典在運行時動態構建SQL語句,如下所示:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Your_Table'

您可以使用它來動態構建SQL語句來執行此插入,並且它將包含其中的所有列。

您可以在T-SQL過程中執行上述操作,並且可以使用sp_executesql來運行動態構建的查詢。 例如,如果您的查詢位於名為@SQL的變量中,則可以執行以下操作:

EXECUTE sp_executesql  @SQL

下面給出一個例子:

create table three (id int identity, other int)
create table four (id int identity, other int)

insert into three select 1
insert into three select 2

declare @sql nvarchar(max)
set @sql = REPLACE(
'
set identity_insert four on
insert into four (:columns:) select :columns: from three
set identity_insert four off',
':columns:',
stuff((
    select ','+quotename(name)
    from sys.columns
    where object_id=object_id('four')-- and is_identity=0
    for xml path('')),1,1,''))
EXECUTE sp_executesql @SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM