首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从存储过程复制表的数据

从存储过程复制表的数据
EN

Stack Overflow用户
提问于 2010-04-23 08:36:09
回答 4查看 14.1K关注 0票数 2

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

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

我在每个DB上有两个数据库(Master_db和Master_copy)和相同的表结构。

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

代码语言:javascript
运行
复制
USE Master_DB
CREATE PROCEDURE TransferData
DEFINE @tableFrom, @tableTo, @databaseTo;

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

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

“无法将显式值插入时间戳列。请使用”插入“与”列“列表一起排除时间戳列,或在时间戳列中插入默认值。”

代码语言:javascript
运行
复制
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来避免这个错误?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-23 08:48:01

SQL查询中的对象名称不能以尝试的方式进行参数化。

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

代码语言:javascript
运行
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2010-04-23 08:43:13

我的建议是编写返回表的函数,而不是使用insert select语句

与不能编写select procedure的过程和函数之间的区别,但可以编写选择函数

票数 1
EN

Stack Overflow用户

发布于 2010-04-23 08:48:34

只有动态SQL允许变量作为表名。对于examp0le:

代码语言:javascript
运行
复制
create procedure dbo.TransferData(
    @src varchar(50),
    @dest varchar(50))
as
declare @query varchar(500)
set @query = 'INSERT INTO ' + @src +
    'SELECT * FROM ' + @dest
exec @query
go
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2697191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档