мне нужна помощь с одной update- вставки со слиянием в SQL Вот оригинал InsertОбъединить таблицы с обновления MS SQL
INSERT INTO [WarehouseMgmt].[JobSteps]
([JobId],[StepName],[StepNo],[ExecName])
VALUES
(N'HOURLY_JOB', N'SyncReportServerReports', 4210, N'WarehouseMgmt.SyncReportServerReports'),
(N'MANUAL_JOB', N'SyncReportServerReports', 4210, N'WarehouseMgmt.SyncReportServerReports'),
(N'HOURLY_JOB', N'SyncReportServerUserEntries', 4220,N'WarehouseMgmt.SyncReportServerUserEntries'),
(N'MANUAL_JOB', N'SyncReportServerUserEntries', 4220, N'WarehouseMgmt.SyncReportServerUserEntries'),
(N'HOURLY_JOB', N'SyncReportServerUsers', 4230,N'WarehouseMgmt.SyncReportServerUsers'),
(N'MANUAL_JOB', N'SyncReportServerUsers', 4230, N'WarehouseMgmt.SyncReportServerUsers'),
(N'HOURLY_JOB', N'StageFactReportServerExecutionLog', 4240, N'WarehouseStaging.StageFactReportServerExecutionLog'),
(N'MANUAL_JOB', N'StageFactReportServerExecutionLog', 4240, N'WarehouseStaging.StageFactReportServerExecutionLog'),
(N'HOURLY_JOB', N'SyncFactReportServerExecutionLog', 4250, N'WarehouseMgmt.SyncFactReportServerExecutionLog'),
(N'MANUAL_JOB', N'SyncFactReportServerExecutionLog', 4250, N'WarehouseMgmt.SyncFactReportServerExecutionLog')
INSERT WarehouseMgmt.SyncJobSteps
(
JobStepId,
StepType,
SyncDataSQLId
)
SELECT
JobStepId = JS.Id,
StepType = 'SQL',
SyncDataSQLId = SSD.Id
FROM WarehouseMgmt.JobSteps JS
JOIN
(
VALUES
('SyncReportServerReports', 'WarehouseMgmt.DimReportServerReports'),
('SyncReportServerUserEntries', 'WarehouseMgmt.DimReportServerUserEntries'),
('SyncReportServerUsers', 'WarehouseMgmt.DimReportServerUsers'),
('StageFactReportServerExecutionLog', 'WarehouseStaging.FactReportServerExecutionLog'),
('SyncFactReportServerExecutionLog', 'WarehouseMgmt.FactReportServerExecutionLog')
) V([SyncJobStep], [SQLDataObjectName])
ON JS.StepName=V.[SyncJobStep]
JOIN WarehouseMgmt.SyncSQLData SSD ON V.[SQLDataObjectName]=SSD.ObjectName
и я хочу иметь это, я мой стол
INSERT INTO [WarehouseMgmt].[JobSteps]
([JobId],[StepName],[StepNo],[ExecName])
VALUES
(N'HOURLY_JOB', N'SyncReportServerReports', 4210, N'WarehouseMgmt.SyncReportServerReports'),
(N'MANUAL_JOB', N'SyncReportServerReports', 4210, N'WarehouseMgmt.SyncReportServerReports'),
(N'HOURLY_JOB', N'SyncReportServerUserEntries', 4220,N'WarehouseMgmt.SyncReportServerUserEntries'),
(N'MANUAL_JOB', N'SyncReportServerUserEntries', 4220, N'WarehouseMgmt.SyncReportServerUserEntries'),
(N'HOURLY_JOB', N'SyncReportServerUsers', 4230,N'WarehouseMgmt.SyncReportServerUsers'),
(N'MANUAL_JOB', N'SyncReportServerUsers', 4230, N'WarehouseMgmt.SyncReportServerUsers'),
(N'HOURLY_JOB', N'SyncReportServerFormatEntries', 4240,N'WarehouseMgmt.SyncReportServerFormatEntries'),
(N'MANUAL_JOB', N'SyncReportServerFormatEntries', 4240, N'WarehouseMgmt.SyncReportServerFormatEntries'),
(N'HOURLY_JOB', N'SyncReportServerReportFormat', 4250,N'WarehouseMgmt.SyncReportServerReportFormat'),
(N'MANUAL_JOB', N'SyncReportServerReportFormat', 4250, N'WarehouseMgmt.SyncReportServerReportFormat'),
(N'HOURLY_JOB', N'StageFactReportServerExecutionLog', 4260, N'WarehouseStaging.StageFactReportServerExecutionLog'),
(N'MANUAL_JOB', N'StageFactReportServerExecutionLog', 4260, N'WarehouseStaging.StageFactReportServerExecutionLog'),
(N'HOURLY_JOB', N'SyncFactReportServerExecutionLog', 4270, N'WarehouseMgmt.SyncFactReportServerExecutionLog'),
(N'MANUAL_JOB', N'SyncFactReportServerExecutionLog', 4270, N'WarehouseMgmt.SyncFactReportServerExecutionLog')
INSERT WarehouseMgmt.SyncJobSteps
(
JobStepId,
StepType,
SyncDataSQLId
)
SELECT
JobStepId = JS.Id,
StepType = 'SQL',
SyncDataSQLId = SSD.Id
FROM WarehouseMgmt.JobSteps JS
JOIN
(
VALUES
('SyncReportServerReports', 'WarehouseMgmt.DimReportServerReports'),
('SyncReportServerUserEntries', 'WarehouseMgmt.DimReportServerUserEntries'),
('SyncReportServerUsers', 'WarehouseMgmt.DimReportServerUsers'),
('SyncReportServerFormatEntries', 'WarehouseMgmt.DimReportServerFormatEntries'),
('SyncReportServerReportFormat', 'WarehouseMgmt.DimReportServerReportFormat'),
('StageFactReportServerExecutionLog', 'WarehouseStaging.FactReportServerExecutionLog'),
('SyncFactReportServerExecutionLog', 'WarehouseMgmt.FactReportServerExecutionLog')
) V([SyncJobStep], [SQLDataObjectName])
ON JS.StepName=V.[SyncJobStep]
JOIN WarehouseMgmt.SyncSQLData SSD ON V.[SQLDataObjectName]=SSD.ObjectName
Я не могу использовать только INSERT, потому что в базе данных уже есть значения, и я не хочу их удалять. Как я могу обновить 4 значения в моей первой Insert и 4 new. Посмотрите внимательно сначала вставить и второй
Я хочу что-то вроде этого
MERGE [WarehouseMgmt].[JobSteps] JS
USING #JobSteps TJS
ON(TJS.[StepName] = JS.[StepName])
WHEN NOT MATCHED BY TARGET
THEN INSERT ([JobId],[StepName],[StepNo],[ExecName])
VALUES
(N'HOURLY_JOB', N'SyncReportServerFormatEntries', 4240,N'WarehouseMgmt.SyncReportServerFormatEntries'),
(N'MANUAL_JOB', N'SyncReportServerFormatEntries', 4240, N'WarehouseMgmt.SyncReportServerFormatEntries'),
(N'HOURLY_JOB', N'SyncReportServerReportFormat', 4250,N'WarehouseMgmt.SyncReportServerReportFormat'),
(N'MANUAL_JOB', N'SyncReportServerReportFormat', 4250, N'WarehouseMgmt.SyncReportServerReportFormat')
WHEN MATCHED
THEN UPDATE JS.[StepNo] = TJS.[StepNo] ;
Почему это так?
Создать временную таблицу и вставить те «новые» значения там. Затем вы можете присоединиться к нему, как и любой другой стол, и заполнить вставку. – chris544
Я не могу использовать временную таблицу, мне нужен оператор слияния, который будет обновлять мои строки и вставлять новые строки. – John
Можно создать переменную таблицы с синтаксисом DECLARE. Он исчезнет в следующей партии. Существуют ли действительно конкретные ограничения, допускающие создание такого рода переменных? – chris544