gpt4 book ai didi

sql - 从存储过程复制表的数据

转载 作者:行者123 更新时间:2023-12-04 21:55:15 25 4
gpt4 key购买 nike

我正在学习如何使用 SQL 和存储过程。我知道语法不正确:

使用存储过程将数据从一个表复制到另一个数据库的另一个表中。问题是我不知道要复制到哪个表或哪个数据库。我希望它使用参数而不是专门指定列。

我有 2 个数据库(Master_db 和 Master_copy),每个数据库上都有相同的表结构。

我想快速选择Master_db中的一个表,并将该表的数据复制到同名的Master_copy表中。我想出了这样的方法:

USE Master_DB
CREATE PROCEDURE TransferData
DEFINE @tableFrom, @tableTo, @databaseTo;

INSERT INTO @databaseTo.dbo.@databaseTo
SELECT * FROM Master_DB.dbo.@tableFrom
GO;

我能得到的最接近的是这个。现在的问题是我有一个时间戳列并呈现错误:

“无法将显式值插入时间戳列。将 INSERT 与列列表一起使用以排除时间戳列,或将 DEFAULT 插入时间戳列。”

USE Kenneth_Integration
GO
CREATE PROCEDURE TransferData
@table SYSNAME
,@databaseTo SYSNAME
AS
DECLARE @sql NVARCHAR(MAX)

SET @sql = 'DELETE FROM ' + @databaseTo + '..' + @table + ' set identity_insert ' + @databaseTo + '.dbo.' + @table +
' on INSERT INTO ' + @databaseTo + '.dbo.' + @table + ' SELECT * FROM Kenneth_Integration.dbo.' + @table

EXEC sp_executesql @sql
GO

如何使用此 SP 解决此错误?

最佳答案

SQL 查询中的对象名称无法按照您尝试的方式进行参数化。

要使其正常工作,您需要使用动态 SQL:

USE Master_DB
CREATE PROCEDURE TransferData
@tableFrom SYSNAME
,@tableTo SYSNAME
,@databaseTo SYSNAME
AS
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO ' + @databaseTo+ '.dbo.' + @tableTo + '
SELECT * FROM Master_DB.dbo.' + @tableFrom

EXEC sp_executesql @sql
GO;

关于sql - 从存储过程复制表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2697191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com