рднрдЧрд╡рд╛рди рдЧрддрд┐рд╢реАрд▓ SQL рдЖрд╢реАрд░реНрд╡рд╛рдж рджреЗрддреЗ рд╣реИрдВ

рд╡рд╛рдХреНрдпрд╛рдВрд╢: "рджреЛрд╣рд░рд╛рд╡ рд╕реАрдЦрдиреЗ рдХреА рдорд╛рдБ рд╣реИ" рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рд╕реБрдирдиреЗ рдореЗрдВ рдЕрдЯрдкрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХреЗ рджреВрд╕рд░реЗ рд╕рд╛рд▓ рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЕрд░реНрде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрднрд╡ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдПрдХ рддрд░рдл, рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдЙрдЪрд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░, рдЙрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рд░ рджрд┐рди рдореБрдЭреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рддрд╛рд░реНрдХрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрдореА рд╣реИред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдиреЗ рдореЗрд░реА рдорджрдж рдХреА, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдирд┐рдпрдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╢реНрд░рдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рдЬреАрд╡рди рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

1. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рд░рдЦрд░рдЦрд╛рд╡

рд╕рдордп рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рд╕реНрдЯреЗрдЬ рдкрд░ рдЬреЛ рд╕рдВрддреЛрд╖рдЬрдирдХ рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд┐рд░рд╛рд╡рдЯ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рддрдерд╛рдХрдерд┐рдд рд╕реЗрд╡рд╛ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рдЬреНрдЬрдирддрд╛рдкреВрд░реНрд╡рдХ рд╕реЗрдЯ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг (рдбреАрдлрд╝реНрд░реИрдЧреНрдореЗрдВрдЯрд┐рдВрдЧ) рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдПрдХ рдмрд╛рд░ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд╕рд╛рде, рдЖрдк SSMS рдореЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рд╕рдордп рдореЗрдВ, рдореИрдВ рдирд┐: рд╢реБрд▓реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдореИрдиреЗрдЬрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдлреА рд╕рдХреНрд░рд┐рдп рдерд╛ (рдпрд╣ рдПрдХ рджрдпрд╛ рд╣реИ рдХрд┐ RedGate рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рд▓реЗрдЦрди рдХреЗ рд╕рдордп рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдерд╛)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрдереНрдп рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рджреБрдЦреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЦрдВрдбрд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреБрдВрдЬреА (рдвреЗрд░) рдХреЗ рдмрд┐рдирд╛ рдЯреЗрдмрд▓ рдмрд╛рд╣рд░ рднреЗрдЬрдирд╛:

SELECT [object_name] = SCHEMA_NAME(o.[schema_id]) + '.' + o.name , [object_type] = o.type_desc , index_name = i.name , index_type = i.type_desc , s.avg_fragmentation_in_percent , s.page_count FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') s JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id JOIN sys.objects o ON o.[object_id] = s.[object_id] WHERE s.index_id > 0 AND avg_fragmentation_in_percent > 0 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдХреНрд╡реЗрд░реА рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рд╡рд┐рдЦрдВрдбрди рдХреА рдбрд┐рдЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдпрд╛ рдкреБрдирд░реНрдЧрдарди рдХрд░реЗрдЧреА:

 DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = ( SELECT 'ALTER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' + CASE WHEN s.avg_fragmentation_in_percent > 50 THEN 'REBUILD WITH (SORT_IN_TEMPDB = ON' + CASE WHEN SERVERPROPERTY('Edition') IN ('Enterprise Edition', 'Developer Edition') THEN ', ONLINE = ON' ELSE '' END + ')' ELSE 'REORGANIZE' END + '; RAISERROR(''Processing ' + i.name + '...'', 0, 1) WITH NOWAIT;' FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') s JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id JOIN sys.objects o ON o.[object_id] = s.[object_id] WHERE s.index_id > 0 AND page_count > 100 AND avg_fragmentation_in_percent > 10 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') EXEC sys.sp_executesql @SQL 

рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╡рд┐рдЦрдВрдбрди рдХреЗ рдХрдо рдбрд┐рдЧреНрд░реА рдХреЗ рд╕рд╛рде рдпрд╛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдбреАрдлрд╝реНрд░реИрдЧреНрдореЗрдиреНрдЯрд┐рдВрдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛрдИ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИред

рдбреАрдлрд╝реНрд░реИрдЧреНрдореЗрдиреНрдЯрд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдСрдкрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд╛рдд рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдбреАрдлрд╝реНрд░реИрдЧреНрдореЗрдВрдЯреЗрд╢рди рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╣реИ, рдЬрдм рд▓реЛрдб рдиреНрдпреВрдирддрдо рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд░ рдХрд┐рд╕реА рдХреЛ рд░рд╛рдд рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП SQL рдПрдЬреЗрдВрдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реИред

рдПрд╕рдХреНрдпреВрдПрд▓ рдПрдЬреЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬреЙрдм рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬреЛ рджреИрдирд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рдерд╛ред

2. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдПрдХ рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗрдВ

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд░рдг рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рд╕рднреА рдЙрдкрд▓рдмреНрдз рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдирддреАрдЬрддрди, 300 рд╕реЗ рдЕрдзрд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП 2 рдХреЙрд▓рдо рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

 CreatedDate DATETIME ModifiedDate DATETIME 

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╕рдордп рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрд╛рд░реНрдп рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЙрди рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реА, рдЬрд┐рдирдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрд▓рдо рдирд╣реАрдВ рдереЗ:

 SELECT SCHEMA_NAME(o.[schema_id]) + '.' + o.name FROM sys.objects o LEFT JOIN ( SELECT * FROM ( SELECT c.[object_id], c.name FROM sys.columns c WHERE c.name IN ('ModifiedDate', 'CreatedDate') ) c PIVOT (MAX(name) FOR name IN (ModifiedDate, CreatedDate)) p ) c ON o.[object_id] = c.[object_id] WHERE o.[type] = 'U' AND (ModifiedDate IS NULL OR CreatedDate IS NULL) 

рдЗрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = ( SELECT ' ALTER TABLE [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ADD ' + CASE WHEN ModifiedDate IS NULL THEN '[ModifiedDate] DATETIME' ELSE '' END + CASE WHEN CreatedDate IS NULL THEN CASE WHEN ModifiedDate IS NULL THEN ', ' ELSE '' END + '[CreatedDate] DATETIME' ELSE '' END + ';' FROM sys.objects o LEFT JOIN ( SELECT * FROM ( SELECT c.[object_id], c.name FROM sys.columns c WHERE c.name IN ('ModifiedDate', 'CreatedDate') ) c PIVOT (MAX(name) FOR name IN (ModifiedDate, CreatedDate)) p ) c ON o.[object_id] = c.[object_id] WHERE o.[type] = 'U' AND (ModifiedDate IS NULL OR CreatedDate IS NULL) FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') EXEC sys.sp_executesql @SQL 

3. рд╕рдореЗрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рдЙрджреНрдпрдореЛрдВ рдореЗрдВ рд╕рд╛рд░рд╛рдВрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдмрд╣реБрдд рдЖрдо рд╣реИрдВред рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛ред

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рд╕рдореЗрдХрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ PIVOT рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдирд┐рд░рдВрддрд░ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдереАрдВред

рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддрд╛рд▓рд┐рдХрд╛, рдХреЙрд▓рдо рдЙрдкрд╕рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реЛрдЧреАред

рдЕрдЧрд▓рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 IF OBJECT_ID ('dbo.temp', 'U') IS NOT NULL DROP TABLE dbo.temp GO DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = 'CREATE TABLE dbo.temp (EmployeeID INT IDENTITY(1,1) PRIMARY KEY' + ( SELECT ', Day' + RIGHT('0' + CAST(sv.number AS VARCHAR(2)), 2) + ' INT' FROM [master].dbo.spt_values sv WHERE sv.[type] = 'p' AND sv.number BETWEEN 1 AND 31 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') + ')' PRINT @SQL EXEC sys.sp_executesql @SQL 

рджреЗрдЦрд╛! рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдорд┐рд▓рддреА рд╣реИ:

 CREATE TABLE dbo.temp ( EmployeeID INT IDENTITY (1, 1) PRIMARY KEY , Day01 INT , Day02 INT , Day03 INT , Day04 INT , Day05 INT , ... , Day30 INT , Day31 INT ) 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рджреИрдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

Source: https://habr.com/ru/post/In196920/


All Articles