我有一个应用程序数据库(A-DB),它从一组数据库(B-set-DB,(大约 50 个 DB))导入。用户选择“B-set-DB”的 4 个 DB,他希望从这些 DB 中为他的应用程序导入 A-DB。
我为导入(大约 4000 行 SQL 代码)编写了一个存储过程,其中包含 4 个硬编码的 B-set-DB 数据库,它运行良好。
所以我的问题是如何使导入的数据库名称变量?
整个4000行我不能使用动态SQL,因为我调用函数和其他存储过程,有很多参数和字符串以及临时表的定义和sub的子查询的supqueries......还有很多其他奇怪的事情。(我知道这听起来很丑,但我只需要让它运行,我没有设计整个东西。)
也许可以在导入存储过程的第一行定义一个同义词:
ALTER PROCEDURE [dbo].[test_storedProcedure]
(@DBName_1 nvarchar(512), @table_name_1 nvarchar(512))
AS
BEGIN
DECLARE @cmd nvarchar(max);
set @cmd = N'create synonym DB_SYN' +
N' for ' +
@DBName_1 + --[A70_V70_V280]
@table_name_1 --.[dbo].[UNITCHANGEMAP]
exec sp_executesql @cmd
...
SELECT * INTO A-DB
FROM DB_SYN
...
END
然后只使用同义词。
或者有没有人知道一种方法可以做到这一点?
顺便说一句,我使用的是 SQL Server 2008,所以我在 SQL Server 的对象资源管理器中看到了所有 50 个数据库。