【发布时间】:2010-04-23 08:36:09
【问题描述】:
我正在学习如何使用 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;
我能得到的最接近的是这个。现在的问题是我有一个 Timestamp 列并且出现了错误:
“无法将显式值插入时间戳列。将 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-server-2008 stored-procedures ssms