簡體   English   中英

在存儲過程中跨多個數據庫插入記錄

[英]Insert records across multiple databases in stored procedure

我正在嘗試創建一個存儲過程,以使用每個表的全限定名將一個數據庫中的表中的記錄插入到另一個數據庫中,但是,由於這些表可以位於不同的數據庫中,因此數據庫名需要能夠基於字段所在的位置。 我試圖設置一個變量並將該變量用作數據庫名稱,但是,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

這是一個如何在動態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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM