
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, MSSQL рдПрдиреНрдпреВрдорд░реЗрд╢рди рдмрдирд╛рдиреЗ / рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ
рдХреА рдХреНрд╖рдорддрд╛
рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рдЕрдХреНрд╕рд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд, рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп, рдмрджрд╕реВрд░рдд, рдЬрдЯрд┐рд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ (рдФрд░ рдХреЗрд╡рд▓ рдореЗрд░реЗ) рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрдИ рдмрд╛рд░, рдпреЗ рд░реЗрдЦрд╛рдПрдБ рдкреИрджрд╛ рдирд╣реАрдВ рд╣реБрдИрдВ:
select * from Process where ProcessType = 1
рдпрд╛
declare @processSuspended int = 1; select * from Process where ProcessType = @processSuspended;
рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдард┐рдирд╛рдИ рд╕реНрддрд░реЛрдВ рдХреА рд╕рдорд╛рди рдмреИрд╕рд╛рдЦреАред
рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ -
SELECT * FROM Process WHERE ProcessType = EnumProcess.Suspended;
рд╕рдорд╛рдзрд╛рди, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рд╕реАрдПрд▓рдЖрд░ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреМрди рд▓рд┐рдЦрдирд╛, рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдФрд░ рд╣рд░ рд╕рдордп рдЙрдирдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп- рдЗрд╕ рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪреЗрдВ
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдмрдирд╛рдПрдБ
рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ : рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012, рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░ 2012 SP1, .Net рдлреНрд░реЗрдорд╡рд░реНрдХ 3.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗред
рдЖрдЗрдП рдЗрд╕реЗ рдмрд┐рдирд╛ рд╢рдмреНрдж рдХреЗ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВ
(UPD: рд╕рднреА рдПрдХ рд╕рд╛рде
рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ )
1. рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ - рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ), (рдпрд╛рдж рд░рдЦреЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрдврд╝реЗ)ред
ASSEMBLY SQLAutoEnums рдмрдирд╛рдПрдБ ... CREATE ASSEMBLY [SQLAutoEnums] FROM WITH PERMISSION_SET = UNSAFE GO CREATE FUNCTION [dbo].[SqlAutoEnums.EnumMembers_Current](@enumName [nvarchar](4000)) RETURNS TABLE ( [ID] [int] NULL, [Name] [nvarchar](4000) NULL ) WITH EXECUTE AS N'dbo' AS EXTERNAL NAME [SQLAutoEnums].[UserDefinedFunctions].[EnumMembersCurrent] GO CREATE FUNCTION [dbo].[SqlAutoEnumsCompile](@code [nvarchar](max)) RETURNS [varbinary](max) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQLAutoEnums].[UserDefinedFunctions].[SqlAutoEnumsCompile] GO CREATE FUNCTION [dbo].[SqlAutoEnumsGenerate](@tableName [nvarchar](4000), @columnPrefix [nvarchar](4000), @columnName [nvarchar](4000), @columnMember [nvarchar](4000), @columnValue [nvarchar](4000)) RETURNS [nvarchar](max) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQLAutoEnums].[UserDefinedFunctions].[SqlAutoEnumsGenerate] GO CREATE FUNCTION [dbo].[SqlAutoEnumsTryCompile](@code [nvarchar](max)) RETURNS [nvarchar](max) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQLAutoEnums].[UserDefinedFunctions].[SqlAutoEnumsTryCompile] GO
2. рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рддрд╛рд▓рд┐рдХрд╛ SqlAutoEnums.Data рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рджреГрд╢реНрдп рд╣реЛрдЧрд╛ (рдмрд╛рдж рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ SqlAutoEnums.Data рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ):
рдмрдирд╛рдПрдБ рддрд╛рд▓рд┐рдХрд╛ dboред [SqlAutoEnums.Data] ... CREATE TABLE [dbo].[SqlAutoEnums.Data]( [ID] [int] IDENTITY(1,1) NOT NULL, [Prefix] [nvarchar](50) NOT NULL, [Name] [nvarchar](50) NOT NULL, [MemberName] [nvarchar](50) NOT NULL, [MemberValue] [int] NOT NULL, CONSTRAINT [PK_SqlAutoEnums.Data] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO CREATE UNIQUE NONCLUSTERED INDEX [IX_SqlAutoEnums.Data] ON [dbo].[SqlAutoEnums.Data] ( [Prefix] ASC, [Name] ASC, [MemberName] ASC, [MemberValue] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO CREATE UNIQUE NONCLUSTERED INDEX [IX_SqlAutoEnums.Data.A] ON [dbo].[SqlAutoEnums.Data] ( [Name] ASC, [MemberValue] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO CREATE VIEW [dbo].[SqlAutoEnums.Data.View] AS SELECT ID , Prefix , Name , MemberName , MemberValue FROM dbo.[SqlAutoEnums.Data]
3. рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛:
рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп ... CREATE FUNCTION [dbo].[SqlAutoEnums.Enum_Equals] ( @enumName NVARCHAR(100) ) RETURNS bit AS BEGIN DECLARE @res BIT = 0; SET @res = CASE WHEN EXISTS ( SELECT Name AS MemberName, ID AS MemberValue FROM dbo.[SqlAutoEnums.EnumMembers_Current](@enumName) except select MemberName, MemberValue FROM dbo.[SqlAutoEnums.EnumMembers_New](@enumName) ) OR EXISTS ( SELECT MemberName, MemberValue FROM dbo.[SqlAutoEnums.EnumMembers_New](@enumName) EXCEPT SELECT Name AS MemberName, ID AS MemberValue FROM dbo.[SqlAutoEnums.EnumMembers_Current](@enumName) ) THEN 0 ELSE 1 END; RETURN @res; END GO
4. рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдмрдирд╛рдиреЗ / рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ
рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ dbo [SqlAutoEnums.Renew] ... CREATE PROCEDURE [dbo].[SqlAutoEnums.Renew] WITH EXECUTE AS SELF AS BEGIN DECLARE @msg NVARCHAR(MAX); BEGIN TRY BEGIN TRAN
4. рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЬ рдкрд░ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ
рдирд┐рд░реНрдорд╛рддрд╛ TRIGGER dboред [SqlAutoEnums.Renew.Trigger] ... CREATE TRIGGER dbo.[SqlAutoEnums.Renew.Trigger] ON [dbo].[SqlAutoEnums.Data] AFTER INSERT, DELETE, UPDATE AS BEGIN EXEC dbo.[SqlAutoEnums.Renew]; END
рдЕрдм рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
INSERT INTO dboред [SqlAutoEnums.Data] ... INSERT INTO dbo.[SqlAutoEnums.Data] (Prefix, Name, MemberName, MemberValue) VALUES ('Enum', 'Lolly', 'C', 14 ), ('Enum', 'Lolly', 'A', 1 ), ('Enum', 'Lolly', 'B', 2 ), ('Enum', 'Process', 'Running', 1 ), ('Enum', 'Process', 'Suspended', 2 ), ('Enum', 'Process', 'Terminated', 3 )
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:
рдЗрдирд╕рд╛рдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
SqlAutoEnums рдЕрд╕реЗрдВрдмрд▓реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, SqlAutoEnums .Generated рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрдВрдЬреАрдХрд░рдг рд╣реИред * рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ, рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рд╕реНрдерд┐рдд рд╣реИрдВред CLR рд╣реЛрд╕реНрдЯреЗрдб
рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ (
tynt ,
tynt ) рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЕрдирд╛рдбрд╝реА,
рд╕реНрдЯреНрд░рд┐рдВрдЧ.рдлреЙрд░реНрдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреВрджрддрд╛ рд╣реИ, рдЗрд╕реЗ csc.exe
рдкрде рдкрде рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
\\ csc.exe "(рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ
.NET рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП
.NET 3.5 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрде
рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд╣рд╛рдБ рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдгред рдкрд░реНрдпрд╛рд╡рд░рдгрдкрд░рд┐рд╡рд░реНрддрди (" TEMP ")ред рдПрдХ рджрд┐рди рд╣рдо рдХреБрдЫ рдХрдо рдЕрдирд╛рдбрд╝реА рдХреА рдЬрдЧрд╣ рд▓реЗрдВрдЧреЗред
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ SQLServer рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдПрдирдо рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ, рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреЗ рдирд╛рдо рд╕реЗ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдПрдВ рдирд┐рдореНрди рд╣реИрдВ:
public enum FooEnum{A = 1, B = 2} public struct MyFooEnum { public MyFooEnum(FooEnum value) { _value = value; } public static MyFooEnum A { get { return new MyFooEnum(FooEnum.A);} } public static MyFooEnum B { get { return new MyFooEnum(FooEnum.B);} } private FooEnum _value; }
рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрдХрдиреАрдХреА рдЖрд╡рд░рдг рд╣реИрдВ (рдЖрдк CLR рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ , MSDN, Google ...
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдФрд░ рдкрд░рд┐рдХрд▓рд┐рдд рдлрд╝реАрд▓реНрдб, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрджрд┐), рдлрд┐рд░, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣, рдкрд░рд┐рд╡рд░реНрддрди (ALTER TYPE - DROP рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред , рдлрд┐рд░ рдмрдирд╛рдПрдБ) рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рд┐рдВрдХ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ / рдХрд╛рд░реНрдп рдПрдХ рдЕрдкрд╡рд╛рдж рдпрд╛ рдЗрд╕рдХреЗ рднрд╛рдЧ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирдИ рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рддреЗ рд╕рдордп, рд╕рднреА рдПрдиреБрдорд░реЗрд╢рдиреНрд╕ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, "рдкреБрд░рд╛рдиреЗ" рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ, рдРрд╕реЗ рдПрдиреБрдорд░реЗрд╢рдиреНрд╕ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬрд┐рдирдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред
SqlAutoEnums.dll рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрд░реЛрддрдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдКрдкрд░ рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдпрд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдПрдЧрд╛ред