在存储过程中的多个数据库中插入记录

时间:2014-08-07 15:19:50

标签: sql sql-server stored-procedures

我正在尝试创建一个存储过程,将记录从一个DB中的表插入另一个DB,使用每个表的完全限定名称,但是,由于这些表可以位于不同的DB中,因此DB名称需要能够根据字段的位置进行更改。我试图设置一个变量并使用该变量作为数据库名称,但是,SQL不允许这种方法。

请向我提供任何建议。

以下是我对此的查询:

DECLARE @FromPractice varchar(5) = 'MCE'
DECLARE @ToPractice varchar(5) = 'CRRLL'
DECLARE @FromEnvironment varchar(5)
DECLARE @ToEnvironment varchar(5)

SET @FromEnvironment = ( select environment from practice where practice = @FromPractice)
SET @ToEnvironment = ( select environment from practice where practice = @ToPractice)


PRINT @FromEnvironment
Print @ToEnvironment

INSERT INTO [@ToEnvironment].dbo.Patinfo
(
 ---Fields
)
SELECT 
---Values
FROM [@FromEnvironment].dbo.PatInfo
where practice = @FromPractice
and pat_num = 25970

1 个答案:

答案 0 :(得分:1)

以下是如何在动态sql中执行此操作的粗略示例。请注意,这很容易被sql注入。在此之前,您需要在流程中添加一些逻辑,以确保您的安全。鉴于其性质,最简单的方法是检查sys.databases中的环境变量。除非数据库名称非常短,否则您可能需要将这些变量保存为5个以上的字符。

declare @SQL nvarchar(max)

set @SQL = 'INSERT INTO [' + @ToEnvironment + '].dbo.Patinfo
(
    --Fields
)
SELECT
--Values
FROM [' + @FromEnvironment + '].dbo.PatInfo
where practice = ''' + @FromPractice + '''
and pat_num = 25970'

--look before you execute
select @SQL

--When satisfied uncomment this
--exec sp_executesql @SQL