【发布时间】:2022-01-25 02:30:52
【问题描述】:
我正在尝试将来自 2 个不同数据库的 2 个表中的数据插入到临时表中。这是因为我需要一个数据来在另一个中创建唯一标识符。
这是我目前拥有的:
-- 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
但是这个查询返回的是这样的:
| 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,并根据已存储在临时表中的初始 ChildValue 更新 DB1 中的 Token 表。
例如大致写成:
UPDATE DB1.Notice
SET ChildValue = NewChildValue
WHERE ChildValue = #Staging.ChildValue
(我知道这不是正确的语法,我只是简写)
不幸的是,数据库之间没有链接,这就是我尝试这样做的原因。
非常感谢任何想法或建议。
【问题讨论】:
-
显然我不知道如何格式化问题中的表格:)
-
您需要提供联合语句中的数据之间的关系。如果它们以相同的方式排序而没有间隙或存在外键关系,那么答案将很容易。如果它们是彼此没有关系的堆,那么答案将很难想象。
标签: sql sql-server temp-tables