在 SQL 服务器中将所有值从源 table 动态复制到目标 table。如果目标 table 中有某个值,则删除并插入

Copy all values from source table to destination table dynamically in SQL Server. If there is some value in destination table then delete and insert

我创建了 2 个 table 并在我的源 table 中填充了值。

现在,我想将这些值动态填充到目标 table 中,并检查目标中是否有任何值 table 然后删除所有这些值并从源中插入它们。

这是我未执行的方法:

CREATE TABLE Customer
(
    CustomerID int NOT NULL,
    Customer_Name nvarchar(50) NULL,
    Customer_Address nvarchar(50) NULL,
    Contact int NULL,
    Created_Date int NULL
)

CREATE TABLE Customer_new
(
    CustomerID int NOT NULL,
    Customer_Name nvarchar(50) NULL,
    Customer_Address nvarchar(50) NULL,
    Contact int NULL,
    Created_Date int NULL
)

INSERT INTO Customer VALUES (1, 'Sarthak', 'cp192', 9560, 2022)
INSERT INTO Customer VALUES (2, 'Rashi', 'cp193', 9561, 2021)
INSERT INTO Customer VALUES (3, 'Rohan', 'cp194', 9562, 2020)
INSERT INTO Customer VALUES (4, 'Aman', 'cp195', 9564, 2019)

ALTER PROCEDURE spCustomera
    @Source_table nvarchar(100),
    @Dest_table nvarchar(100)
AS
BEGIN
    DECLARE @Target_Schema NVARCHAR(30)
    DECLARE @Source_Schema NVARCHAR(30)

    SELECT TABLE_NAME, TABLE_SCHEMA 
    INTO #data 
    FROM INFORMATION_SCHEMA.columns

    SELECT 
        @Dest_table = TABLE_NAME, 
        @Source_table = TABLE_NAME, 
        @Target_Schema =TABLE_SCHEMA, 
        @Source_Schema = TABLE_SCHEMA 
    FROM #data

    DECLARE @SQL AS nvarchar(1000)
    SET @SQL = (N'DELETE FROM ' + @Target_Schema + '.' + @Dest_table +
                 ' INSERT INTO ' + @Target_Schema + '.' + @Dest_table + 
                 '     SELECT * FROM ' + @Source_Schema + '.' + @Source_table)
        
    EXEC @SQL 
END

EXEC spCustomera @Source_table = 'customer', @Dest_table = 'customer_new'

在您提取目标和源 table 名称的 select 中,它们是相同的 table。因此,您要从 table 中删除,然后尝试插入回相同的 table。

我假设您的 Customer_new table 是目的地 table,Customer 是来源 table。

您只需更新以下行,通过将 + '_new' 添加到目标 table 部分,将 _new 附加到目标 table 名称的末尾select 语句的:

select @Dest_table = TABLE_NAME + '_new', @Source_table = TABLE_NAME, @Target_Schema =TABLE_SCHEMA                 
        , @Source_Schema = TABLE_SCHEMA from #data