sql - 在 SQL Server 中将所有值从源表动态复制到目标表。如果目标表中有一些值,则删除并插入
问题描述
我创建了 2 个表并填充了源表中的值。
现在,我想动态地将这些值填充到目标表中,并检查目标表中是否有任何值,然后删除所有这些值并从源中插入它们。
这是我没有执行的方法:
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'
解决方案
在您选择要提取目标和源表名称的位置中,它们是同一个表。因此,您正在从表中删除,然后尝试插入回同一个表中。
我假设您的Customer_new
表是目标表并且Customer
是源表。
您应该只需要通过添加到 select 语句的目标表部分来更新以下行以将 附加_new
到目标表名称的末尾:+ '_new'
select @Dest_table = TABLE_NAME + '_new', @Source_table = TABLE_NAME, @Target_Schema =TABLE_SCHEMA
, @Source_Schema = TABLE_SCHEMA from #data
推荐阅读
- string - 在这种情况下可以使用 Lambda 函数,还是只是一个 def 函数?
- c++ - c++ OpenGL ES中xz平面上的“无限”网格
- mysql - 如何重置mysql root密码?
- java - 如何为两个不同的 hasRole 设置自定义错误消息
- c++ - 节点指针数组
- javascript - options.domAPI 不是函数
- javascript - VS2019 捆绑和缩小导致 ES6 代码错误并且不会缩小
- swift - 参数类型“AnyObject.Protocol”应为类或类约束类型的实例
- javascript - 如何在 React/React-Native 的 React-navigation 中用上下文包装几个屏幕?
- azure - Azure Databricks 笔记本未通过 YAML deploynotebooks@0 任务部署