如何将来自不同数据库的数据插入到 Temp Table

How To Insert Data Into Temp Table From Different Databases

我正在尝试将来自 2 个不同数据库的 2 table 的数据插入临时 table。这是因为我需要一个数据在另一个中创建一个唯一标识符。

这是我目前拥有的:

-- Create Temp table for data manipulation
IF OBJECT_ID('tempdb..#Staging') IS NOT NULL
    DROP TABLE #Staging

CREATE TABLE #Staging
(
    InitialChildValue nvarchar(4000),
    PropertyNumber nvarchar(10),
    NewYearValue nvarchar(2),
    NewChildValue nvarchar(4000)
)

--Insert initial data into temp table
INSERT INTO #Staging (InitialChildValue, PropertyNumber, NewYearValue, NewChildValue)
    SELECT combo.ChildValue, combo.TABLE_NO, '22' AS YEAR, ''
    FROM 
        (SELECT ChildValue, NULL AS TABLE_NO 
         FROM [DB1].[Version].[Token] 
         WHERE DeletedTransactionKey IS NULL
         UNION
         SELECT NULL AS ChildValue, TABLE_NO 
         FROM [DB2].[dbo].[Notice]
         -- WHERE NOTICE_RUN_CTR = @NoticeRunCTR
        ) combo

但是这个查询 returns 是这样的:

ChildValue TABLE_NO YEAR (empty)
1 22
2 22
3 22
a 22
b 22
c 22

我想要实现的是这样的:

ChildValue TABLE_NO YEAR (empty)
1 a 22
2 b 22
3 c 22

在我的存储过程中,我将继续创建一个像“FY1a22”这样的 ID,并根据已经存储在临时 table 中的初始 ChildValue 更新 DB1 中的令牌 table ].

例如松散地写成:

UPDATE DB1.Notice
SET ChildValue = NewChildValue
WHERE ChildValue = #Staging.ChildValue

(我知道这不是正确的语法,我只是 shorthand 写的)

不幸的是,数据库之间没有 link,这就是我尝试这样做的原因。

如有任何想法或建议,我们将不胜感激。

您可以使用 row_number() 生成序列号并使用它来连接 TokenNotice

的行

linkChildValueTable_No好像没有关系。根据提供的预期结果,我假设它会按照它的价值

SELECT t.ChildValue, n.TABLE_NO, '22' AS YEAR, ''
FROM 
(
    SELECT ChildValue, 
           RN = ROW_NUMBER() OVER (ORDER BY ChildValue)
    FROM   [DB1].[Version].[Token] 
    WHERE DeletedTransactionKey IS NULL
) t
INNER JOIN
(
    SELECT TABLE_NO,
           RN = ROW_NUMBER() OVER (ORDER BY TABLE_NO) 
    FROM [DB2].[dbo].[Notice]
) n
ON t.RN = n.RN