30. marts 2011 - 22:36Der er
9 kommentarer og 1 løsning
opdatering af flere rækker i éen forespørgsel
Jeg har flere hundrede updates jeg skal lave på een gang ud fra et array af ids: [1,2,3,5,100,110, osv...]
update Model set isFound = true, dateFound = GETDATE() where id= 1, update Model set isFound = true, dateFound = GETDATE() where id= 2, update Model set isFound = true, dateFound = GETDATE() where id= 3, osv.
Er den en måde hvorpå jeg kan få opdateret alle disse rækker uden at skulle eksekvere den samme update statement uhyggeligt mange gange.
MERGE INTO PeterTable AS PS USING ( VALUES (10, 'Peter', GETDATE())) AS S(Id, Name, Added) ON (PS.Id = S.Id) WHEN MATCHED THEN UPDATE SET PS.Added = S.Added, PS.Name = S.Name WHEN NOT MATCHED THEN INSERT (Id, Name, Added) VALUES ( S.Id, S.Name, S.Added);
CREATE TABLE [dbo].[PeterTable]( [Id] [int] NOT NULL, [Name] [varchar](50) NOT NULL, [Added] [date] NOT NULL )
jeg har, til at begynde med, valgt at benytte IN - løsningen - mest fordi den var nem at implementere - og jeg kendte den egentlig godt i forvejen den var blot gået i glemmebogen. Merge ser interessant ud og den vil jeg teste med om den skulle performe bedre endnu.
Jeg benytter sql server express management studio - ved du hvordan man laver en performance test heri?
Sql Profiler ville være et godt bud, men den er vist ikke med i Express SSMS.
Der er også nogen muligheder for at få execution plans, client statistics i SSMS ... IO og Time Statistics.
Men det er et meget meget stort emne ...
Husk også at ting kører hurtigere når de først er cached.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.