3

我需要将表从一个数据库复制到另一个。我的第一个猜测是使用源代码中的以下语句:

SELECT *  
INTO TARGETDB.SCHEMA.TABLENAME  
FROM SCHEMA.TABLENAME  

(编辑:我知道它不会设置主键等,没关系)

可悲的是,我必须在我的项目中使用的类几乎破坏了这个声明,我无法解决这个问题。

我的下一个想法是在 SQL Server 数据库中创建一个函数或过程,这样我就可以使用

SCHEMA.FUNCTNAME paramTARGETDB, paramTABLENAME  

作为我的代码中的声明。

我当前的程序如下所示:

CREATE PROCEDURE [SCHEMA].FUNCTNAME
    @pVC_TARGETDB VARCHAR(240),
    @pVC_TABLENAME VARCHAR(240)  
AS
BEGIN
  SELECT *
  INTO @pVC_TARGETDB.SYSADM.@pVC_TABLENAME
  FROM SCHEMA.@pVC_TABLENAME
END

但我对 SQL 的了解并不多,SQL Server Management Studio 告诉我有语法错误。每个都@pVC_*被标记(编辑:在前两次出现中,它们没有被标记。仅在 BEGIN 和 END 之间的块中)。我得到的信息是:

“@pVC_* 附近的语法错误需要 ID、QUOTED_ID 或 '.'。”

我几乎尝试了所有我能想象或用谷歌找到的写作方式,也许很容易解决,也许不是。我做不到,请帮帮我。

4

1 回答 1

2

您可以动态创建 SQL 语句然后执行它

DECLARE @SQL NVARCHAR(MAX)

SET @SQL =
('SELECT *
INTO ' + @pVC_TARGETDB + '.SYSADM.' + @pVC_TABLENAME +
' FROM
SCHEMA.' + @pVC_TABLENAME)

EXEC (@SQL)
于 2013-02-07T12:34:50.343 回答