1 year ago
#76752
Beweelam
SQL Server Merge statement issues
I have 3 tables like this:
CREATE TABLE VersionsProjects
(
IdVersionProject INT IDENTITY(1,1) PRIMARY KEY,
Version INT
);
CREATE TABLE Parameters
(
IdParameter INT IDENTITY(1,1) PRIMARY KEY,
IdVersionProject INT,
Name VARCHAR(50),
FOREIGN KEY (IdVersionProject) REFERENCES VersionsProjects(IdVersionProject)
);
CREATE TABLE Questions
(
IdQuestion INT IDENTITY(1,1) PRIMARY KEY,
Text VARCHAR(50),
IdParameter INT,
FOREIGN KEY (IdParameter) REFERENCES Parameters(IdParameter)
);
When I create a new insert in VersionsProjects
, I duplicate all the rows in parameters related to old versionsProjects
and duplicate all the rows in questions related to duplicate parameters.
Example :
DECLARE @TempParametersDuplicated TABLE (Old_ID_Parameter INT, New_ID_Parameter INT)
MERGE INTO Parameters T1
USING (SELECT IdParameter, Name
FROM Parameters P
WHERE IdVersionProject = @OldIdVersionProject) T2 ON 1 = 0
WHEN NOT MATCHED
THEN
INSERT (Name, IdVersionProject)
VALUES (T2.Name, @NewIdVersionProject)
OUTPUT T2.IdParameter, INSERTED.IdParameter INTO TempParametersDuplicated;
MERGE INTO Parameters T1
USING (SELECT Text, T.New_ID as IdParameter
FROM Questions Q
INNER JOIN @TempParametersDuplicated T ON Q.IdParameter = T.Old_ID
WHERE IdVersionProject = @OldIdVersionProject) T2 ON 1 = 0
WHEN NOT MATCHED
THEN
INSERT (Text, IdParameter)
VALUES (T2.Text, T2.IdParameter);
My first question: is the method I'm using the best? Or is there a cleaner way to do the same thing ?
My second question: I heard that the merge command is really unreliable. Should I be worried about it? Sometime, I have more than 300k rows to insert.
sql
sql-server
merge
insert
0 Answers
Your Answer