{"id":269119,"date":"2015-11-26T20:01:02","date_gmt":"2015-11-26T17:01:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=269119"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=269119","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c TSQL \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u00ab\u0411\u0430\u043b\u0434\u0443\u00bb"},"content":{"rendered":"<p>       \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u043e\u0431 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u0435 \u00ab<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%BB%D0%B4%D0%B0_(%D0%B8%D0%B3%D1%80%D0%B0)\">\u0411\u0430\u043b\u0434\u0430<\/a>\u00bb, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0435\u0449\u0435 \u0432 \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0434\u044b.<\/p>\n<p>  \u041d\u0430 \u0434\u043d\u044f\u0445 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2013 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044d\u0442\u043e\u0439 \u0438\u0433\u0440\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430?<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043c\u043e\u0438\u043c \u043b\u044e\u0431\u0438\u043c\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SQL, \u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e TSQL. \u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0418\u0418 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 SQL.<\/p>\n<p>  \u0410\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u2013 <a href=\"http:\/\/buhgalter-online.kz\/files\/sql\/balda_tsql.rar\">\u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/a>.<br \/>  \u0412\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0435\u043c \u0431\u0443\u043a\u0432\u044b \u00ab\u0415\u00bb \u0438 \u00ab\u0401\u00bb \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0443 (\u043a\u0430\u043a \u00ab\u0415\u00bb).<\/p>\n<p>  <b>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430:<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/75e\/e7b\/264\/75ee7b2648dd499d81137559c224324f.png\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  <b>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446:<\/b>  <\/p>\n<ul>\n<li>BaldaCell \u2013 \u042f\u0447\u0435\u0439\u043a\u0438 (i \u2013 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, j \u2013 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u043e\u043b\u0431\u0446\u0430)<\/li>\n<li>BaldaCellLink \u2013 \u0421\u0432\u044f\u0437\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/li>\n<li>BaldaABC \u2013 \u0410\u043b\u0444\u0430\u0432\u0438\u0442 (\u0431\u0443\u043a\u0432\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0432)<\/li>\n<li>BaldaField \u2013 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/li>\n<li>BaldaFieldWord \u2013 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0432<\/li>\n<li>BaldaWord \u2013 \u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043b\u043e\u0432<\/li>\n<li>BaldaWordIndex \u2013 \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/li>\n<\/ul>\n<p>  <b>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446:<\/b>  <\/p>\n<pre><code class=\"sql\">\/* DROP TABLE BaldaWord DROP TABLE BaldaFieldWord DROP TABLE BaldaField DROP TABLE BaldaCellLink DROP TABLE BaldaCell DROP TABLE BaldaABC DROP TABLE BaldaWordIndex *\/    -------------------------------------------------------------------- -- \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e\u043b\u044f -------------------------------------------------------------------- CREATE TABLE BaldaCell(   ID int NOT NULL,   i int NOT NULL,   j int NOT NULL, CONSTRAINT PK_BaldaCell PRIMARY KEY(ID) ) GO  -- \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u043e\u043b\u044f DECLARE @MaxW int=5 DECLARE @MaxH int=5  -- \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a ;WITH iCte AS(   SELECT 1 i   UNION ALL   SELECT i+1 FROM iCte WHERE i&lt;@MaxW ), jCte AS(   SELECT 1 j   UNION ALL   SELECT j+1 FROM jCte WHERE j&lt;@MaxH ) INSERT BaldaCell(ID,i,j) SELECT 10000+i*100+j,i,j FROM iCte CROSS JOIN jCte OPTION(MAXRECURSION 0) GO    -------------------------------------------------------------------- -- \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 -------------------------------------------------------------------- CREATE TABLE BaldaCellLink(   CellID int NOT NULL,   LinkCellID int NOT NULL, CONSTRAINT PK_BaldaCellLink PRIMARY KEY(CellID,LinkCellID), CONSTRAINT FK_BaldaCellLink_CellID FOREIGN KEY(CellID) REFERENCES BaldaCell(ID), CONSTRAINT FK_BaldaCellLink_LinkCellID FOREIGN KEY(LinkCellID) REFERENCES BaldaCell(ID) ) GO  -- \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0432\u044f\u0437\u0438 INSERT BaldaCellLink(CellID,LinkCellID) SELECT c.ID,l.ID FROM BaldaCell c JOIN BaldaCell l ON (c.j=l.j AND c.i IN(l.i-1,l.i+1)) OR (c.i=l.i AND c.j IN(l.j-1,l.j+1)) GO  \/* SELECT * FROM BaldaCellLink WHERE CellID=10303 -- 4 \u0441\u043e\u0441\u0435\u0434\u0430 SELECT * FROM BaldaCellLink WHERE CellID=10503 -- 3 \u0441\u043e\u0441\u0435\u0434\u0430 SELECT * FROM BaldaCellLink WHERE CellID=10105 -- 2 \u0441\u043e\u0441\u0435\u0434\u0430 *\/    -------------------------------------------------------------------- -- \u0430\u043b\u0444\u0430\u0432\u0438\u0442 -------------------------------------------------------------------- CREATE TABLE BaldaABC(   Letter nchar(1) NOT NULL, CONSTRAINT PK_BaldaABC PRIMARY KEY(Letter) ) GO  -- \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438 INSERT BaldaABC(Letter) VALUES (N'\u0410'),(N'\u0411'),(N'\u0412'),(N'\u0413'),(N'\u0414'),(N'\u0415'),(N'\u0416'),(N'\u0417'),(N'\u0418'),(N'\u0419'), (N'\u041a'),(N'\u041b'),(N'\u041c'),(N'\u041d'),(N'\u041e'),(N'\u041f'),(N'\u0420'),(N'\u0421'),(N'\u0422'),(N'\u0423'), (N'\u0424'),(N'\u0425'),(N'\u0426'),(N'\u0427'),(N'\u0428'),(N'\u0429'),(N'\u042a'),(N'\u042b'),(N'\u042c'),(N'\u042d'), (N'\u042e'),(N'\u042f') GO    -------------------------------------------------------------------- -- \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f -------------------------------------------------------------------- CREATE TABLE BaldaField(   CellID int NOT NULL,   Letter nchar(1) NOT NULL, CONSTRAINT PK_BaldaField PRIMARY KEY(CellID), CONSTRAINT FK_BaldaField_CellID FOREIGN KEY(CellID) REFERENCES BaldaCell(ID), CONSTRAINT FK_BaldaField_Letter FOREIGN KEY(Letter) REFERENCES BaldaABC(Letter) ) GO    -------------------------------------------------------------------- -- \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 -------------------------------------------------------------------- CREATE TABLE BaldaFieldWord(   Step int NOT NULL,   CellID int NOT NULL,   Word nvarchar(50) NOT NULL, CONSTRAINT PK_BaldaFieldWord PRIMARY KEY(CellID), CONSTRAINT UK_BaldaFieldWord UNIQUE(Word), CONSTRAINT FK_BaldaFieldWord_CellID FOREIGN KEY(CellID) REFERENCES BaldaField(CellID) ON DELETE CASCADE, ) GO    -------------------------------------------------------------------- -- \u0441\u043b\u043e\u0432\u0430\u0440\u044c -------------------------------------------------------------------- CREATE TABLE BaldaWord(   Word nvarchar(50) NOT NULL,   WordLen int NOT NULL,   ReverseWord nvarchar(50) NOT NULL, CONSTRAINT PK_Word PRIMARY KEY(Word) ) GO  CREATE TABLE #TempWord(   Word nvarchar(50) NOT NULL )  -- \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 (ASCII) BULK INSERT #TempWord FROM 'd:\\Temp\\\u0421\u043b\u043e\u0432\u0430\u0440\u044c.txt' WITH (     FIRSTROW = 1,     FIELDTERMINATOR = ',',     ROWTERMINATOR = '\\n',     CODEPAGE = 'ACP' );  INSERT BaldaWord(Word,WordLen,ReverseWord) SELECT Word,LEN(Word),REVERSE(Word) FROM #TempWord   DROP TABLE #TempWord    -------------------------------------------------------------------- -- \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443\/\u043a\u043e\u043d\u0446\u0443 \u0441\u043b\u043e\u0432 -------------------------------------------------------------------- CREATE TABLE BaldaWordIndex(   WordIndex nvarchar(50) NOT NULL, CONSTRAINT PK_BaldaWordIndex PRIMARY KEY(WordIndex) ) GO   DECLARE @MaxWordLen int=(SELECT MAX(WordLen) FROM BaldaWord) DECLARE @IndexLen int=2  WHILE @IndexLen&lt;@MaxWordLen BEGIN    INSERT BaldaWordIndex(WordIndex)   SELECT LEFT(Word,@IndexLen)   FROM BaldaWord   WHERE LEN(LEFT(Word,@IndexLen))=@IndexLen   UNION   SELECT LEFT(ReverseWord,@IndexLen)   FROM BaldaWord   WHERE LEN(LEFT(ReverseWord,@IndexLen))=@IndexLen    SET @IndexLen+=1  END GO <\/code><\/pre>\n<p>  <b>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 (\u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f):<\/b>  <\/p>\n<pre><code class=\"sql\">-- \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u043b\u044f DELETE BaldaField   -- \u0431\u0443\u043a\u0432\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0421'), (10302,N'\u041b'), (10303,N'\u041e'), (10304,N'\u0412'), (10305,N'\u041e')  -- \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0421\u041b\u041e\u0412\u041e')   \/* INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0422'), (10302,N'\u0420'), (10303,N'\u041e'), (10304,N'\u041f'), (10305,N'\u0410')  INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0422\u0420\u041e\u041f\u0410') *\/  \/* INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0428'), (10302,N'\u041a'), (10303,N'\u0410'), (10304,N'\u041b'), (10305,N'\u0410')  INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0428\u041a\u0410\u041b\u0410') *\/    DECLARE @Step int=1 DECLARE @NewCellID int=0 DECLARE @NewLetter nchar(1) DECLARE @Word nvarchar(50) DECLARE @WordLen int  WHILE @NewCellID IS NOT NULL BEGIN    -- \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441   WITH newWordCte AS(     SELECT       CellID NewCellID,       Letter NewLetter,       CellID,       CAST(Letter AS nvarchar(50)) Word,       1 WordLen,       CAST(CellID AS varchar(300)) CellPath     FROM       (         SELECT l.LinkCellID CellID,abc.Letter         FROM BaldaField f         -- \u0431\u0443\u0434\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438         JOIN BaldaCellLink l ON f.CellID=l.CellID AND l.LinkCellID NOT IN(SELECT CellID FROM BaldaField)         -- \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0438\u0445 \u043a\u0430\u0436\u0434\u0443\u044e \u0431\u0443\u043a\u0432\u0443         CROSS JOIN BaldaABC abc       ) q      UNION ALL      SELECT       w.NewCellID,       w.NewLetter,       f.CellID,       CAST(w.Word+f.Letter AS nvarchar(50)),       w.WordLen+1,       CAST(w.CellPath+','+CAST(f.CellID AS varchar(10)) AS varchar(300))     FROM newWordCte w     JOIN BaldaCellLink l ON w.CellID=l.CellID     JOIN BaldaField f ON f.CellID=l.LinkCellID     -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0443     JOIN BaldaWordIndex i ON w.Word+f.Letter=i.WordIndex     -- \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0435     WHERE CHARINDEX(CAST(f.CellID AS varchar(10)),w.CellPath)=0   )   SELECT DISTINCT NewCellID,NewLetter,Word   INTO #ResultAll   FROM newWordCte   WHERE WordLen&gt;1 -- \u0442.\u043a. \u0441\u043b\u043e\u0432\u0430 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u043e\u0439 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f   OPTION(MAXRECURSION 0);      SELECT TOP 1 WITH TIES -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430     NewCellID,     NewLetter,     Word,     WordLen   INTO #Result   FROM     (       -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435       SELECT r.NewCellID,r.NewLetter,w.Word,w.WordLen       FROM #ResultAll r       JOIN BaldaWord w ON r.Word=w.Word       WHERE w.Word NOT IN(SELECT Word FROM BaldaFieldWord)        UNION        -- \u0435\u0441\u043b\u0438 \u0441\u043b\u043e\u0432\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438       SELECT r.NewCellID,r.NewLetter,w.Word,w.WordLen       FROM #ResultAll r       JOIN BaldaWord w ON r.Word=w.ReverseWord       WHERE w.Word NOT IN(SELECT Word FROM BaldaFieldWord)        UNION        -- \u043d\u0430 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0441\u043b\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e       SELECT NULL,NULL,NULL,-1     ) q   ORDER BY WordLen DESC      DROP TABLE #ResultAll      -- \u044d\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0418\u0418   DECLARE @RowCount int=(SELECT COUNT(*) FROM #Result)    SELECT     @NewCellID=NewCellID,     @NewLetter=NewLetter,     @Word=Word,     @WordLen=WordLen   FROM #Result   ORDER BY NewCellID   OFFSET CAST(FLOOR(RAND()*@RowCount) AS int) ROWS FETCH NEXT 1 ROWS ONLY    DROP TABLE #Result       IF @NewCellID IS NOT NULL   BEGIN     -- \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442     INSERT BaldaField(CellID,Letter) VALUES(@NewCellID,@NewLetter)     INSERT BaldaFieldWord(Step,CellID,Word) VALUES(@Step,@NewCellID,@Word)         SET @Step+=1   END  END <\/code><\/pre>\n<p>  \u041d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p>  <b>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/b>  <\/p>\n<pre><code class=\"sql\">-- \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 SELECT uw.Step,c.i,c.j,f.Letter,uw.Word,LEN(uw.Word) WordLen FROM BaldaFieldWord uw JOIN BaldaField f ON uw.CellID=f.CellID JOIN BaldaCell c ON c.ID=f.CellID ORDER BY uw.Step  -- \u0432\u0438\u0434 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f SELECT * FROM   (     SELECT c.i,c.j,f.Letter     FROM BaldaCell c     LEFT JOIN BaldaField f ON c.ID=f.CellID   ) q PIVOT(MAX(Letter) FOR j IN([1],[2],[3],[4],[5])) p ORDER BY i <\/code><\/pre>\n<p>  <b>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a92\/29c\/72e\/a9229c72e7764880af638fd173cffe43.png\"\/><\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432 2 \u0440\u0430\u0437\u0430 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043f\u043e\u043b\u044f). \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 BaldaWordIndex, \u0437\u0430 \u0441\u0447\u0435\u0442 \u0447\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 BaldaWord.<\/p>\n<p>  <b>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b BaldaWordIndex:<\/b>  <\/p>\n<pre><code class=\"sql\">-------------------------------------------------------------------- -- \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443\/\u043a\u043e\u043d\u0446\u0443 \u0441\u043b\u043e\u0432 - \u0432\u0435\u0440\u0441\u0438\u044f 2 -------------------------------------------------------------------- DROP TABLE BaldaWordIndex GO  CREATE TABLE BaldaWordIndex(   WordIndex nvarchar(50) NOT NULL,   IsWord bit NOT NULL,   Word  nvarchar(50), CONSTRAINT PK_BaldaWordIndex PRIMARY KEY(WordIndex) ) GO   DECLARE @MaxWordLen int=(SELECT MAX(WordLen) FROM BaldaWord) DECLARE @IndexLen int=2  WHILE @IndexLen&lt;=@MaxWordLen BEGIN    INSERT BaldaWordIndex(WordIndex,IsWord,Word)   SELECT WordIndex,MAX(IsWord),MAX(Word)   FROM     (       SELECT LEFT(Word,@IndexLen) WordIndex,IIF(LEN(Word)=@IndexLen,1,0) IsWord,IIF(LEN(Word)=@IndexLen,Word,NULL) Word       FROM BaldaWord       WHERE LEN(LEFT(Word,@IndexLen))=@IndexLen       UNION       SELECT LEFT(ReverseWord,@IndexLen),IIF(LEN(Word)=@IndexLen,1,0),IIF(LEN(Word)=@IndexLen,Word,NULL)       FROM BaldaWord       WHERE LEN(LEFT(ReverseWord,@IndexLen))=@IndexLen     ) q   GROUP BY WordIndex    SET @IndexLen+=1  END GO  \/* SELECT COUNT(*) FROM BaldaWordIndex WHERE IsWord=1   SELECT COUNT(*) FROM   (     SELECT Word     FROM BaldaWord     UNION     SELECT ReverseWord     FROM BaldaWord   ) q *\/ <\/code><\/pre>\n<p>  <b>\u041d\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430:<\/b>  <\/p>\n<pre><code class=\"sql\">-- \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u043e\u043b\u044f DELETE BaldaField   -- \u0431\u0443\u043a\u0432\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0421'), (10302,N'\u041b'), (10303,N'\u041e'), (10304,N'\u0412'), (10305,N'\u041e')  -- \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0421\u041b\u041e\u0412\u041e')   \/* INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0422'), (10302,N'\u0420'), (10303,N'\u041e'), (10304,N'\u041f'), (10305,N'\u0410')  INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0422\u0420\u041e\u041f\u0410') *\/  \/* INSERT BaldaField(CellID,Letter) VALUES (10301,N'\u0428'), (10302,N'\u041a'), (10303,N'\u0410'), (10304,N'\u041b'), (10305,N'\u0410')  INSERT BaldaFieldWord(Step,CellID,Word) VALUES(0,10301,N'\u0428\u041a\u0410\u041b\u0410') *\/    DECLARE @Step int=1 DECLARE @NewCellID int=0 DECLARE @NewLetter nchar(1) DECLARE @Word nvarchar(50) DECLARE @WordLen int  WHILE @NewCellID IS NOT NULL BEGIN    -- \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441   WITH newWordCte AS(     SELECT       CellID NewCellID,       Letter NewLetter,       CellID,       CAST(Letter AS nvarchar(50)) Word,       1 WordLen,       CAST(CellID AS varchar(300)) CellPath,       CAST(0 AS bit) IsWord,       CAST(NULL AS nvarchar(50)) ResWord     FROM       (         SELECT l.LinkCellID CellID,abc.Letter         FROM BaldaField f         -- \u0431\u0443\u0434\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438         JOIN BaldaCellLink l ON f.CellID=l.CellID AND l.LinkCellID NOT IN(SELECT CellID FROM BaldaField)         -- \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0438\u0445 \u043a\u0430\u0436\u0434\u0443\u044e \u0431\u0443\u043a\u0432\u0443         CROSS JOIN BaldaABC abc       ) q      UNION ALL      SELECT       w.NewCellID,       w.NewLetter,       f.CellID,       CAST(w.Word+f.Letter AS nvarchar(50)),       w.WordLen+1,       CAST(w.CellPath+','+CAST(f.CellID AS varchar(10)) AS varchar(300)),       i.IsWord,       i.Word     FROM newWordCte w     JOIN BaldaCellLink l ON w.CellID=l.CellID     JOIN BaldaField f ON f.CellID=l.LinkCellID     -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0443     JOIN BaldaWordIndex i ON w.Word+f.Letter=i.WordIndex     -- \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0435     WHERE CHARINDEX(CAST(f.CellID AS varchar(10)),w.CellPath)=0   )   SELECT TOP 1 WITH TIES -- \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430     NewCellID,     NewLetter,     Word,     WordLen   INTO #Result   FROM     (       SELECT DISTINCT NewCellID,NewLetter,ResWord Word,WordLen       FROM newWordCte       WHERE IsWord=1 -- \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430         AND ResWord NOT IN(SELECT Word FROM BaldaFieldWord)        UNION ALL        -- \u043d\u0430 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0441\u043b\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e       SELECT NULL,NULL,NULL,-1     ) q   ORDER BY WordLen DESC   OPTION(MAXRECURSION 0);       -- \u044d\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0418\u0418   DECLARE @RowCount int=(SELECT COUNT(*) FROM #Result)    SELECT     @NewCellID=NewCellID,     @NewLetter=NewLetter,     @Word=Word,     @WordLen=WordLen   FROM #Result   ORDER BY NewCellID   OFFSET CAST(FLOOR(RAND()*@RowCount) AS int) ROWS FETCH NEXT 1 ROWS ONLY    DROP TABLE #Result       IF @NewCellID IS NOT NULL   BEGIN     -- \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442     INSERT BaldaField(CellID,Letter) VALUES(@NewCellID,@NewLetter)     INSERT BaldaFieldWord(Step,CellID,Word) VALUES(@Step,@NewCellID,@Word)         SET @Step+=1   END  END <\/code><\/pre>\n<p>  \u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>  <b>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/b>  <\/p>\n<pre><code class=\"sql\">-- \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 SELECT uw.Step,c.i,c.j,f.Letter,uw.Word,LEN(uw.Word) WordLen FROM BaldaFieldWord uw JOIN BaldaField f ON uw.CellID=f.CellID JOIN BaldaCell c ON c.ID=f.CellID ORDER BY uw.Step  -- \u0432\u0438\u0434 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f SELECT * FROM   (     SELECT c.i,c.j,f.Letter     FROM BaldaCell c     LEFT JOIN BaldaField f ON c.ID=f.CellID   ) q PIVOT(MAX(Letter) FOR j IN([1],[2],[3],[4],[5])) p ORDER BY i <\/code><\/pre>\n<p>  <b>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0435.<\/b><\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SQL.<\/p>\n<p>  \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0435 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0435 \u2013 SQL \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 SQL \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 CTE-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0430\u0439\u0442\u0435 SQL \u2013 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430.<\/p>\n<p>  \u0423\u0434\u0430\u0447\u0438 \u0438 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/271795\/\"> http:\/\/habrahabr.ru\/post\/271795\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u043e\u0431 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u0435 \u00ab<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%BB%D0%B4%D0%B0_(%D0%B8%D0%B3%D1%80%D0%B0)\">\u0411\u0430\u043b\u0434\u0430<\/a>\u00bb, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0435\u0449\u0435 \u0432 \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0434\u044b.<\/p>\n<p>  \u041d\u0430 \u0434\u043d\u044f\u0445 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2013 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044d\u0442\u043e\u0439 \u0438\u0433\u0440\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430?<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043c\u043e\u0438\u043c \u043b\u044e\u0431\u0438\u043c\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SQL, \u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e TSQL. \u042d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0418\u0418 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 SQL.<\/p>\n<p>  \u0410\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u2013 <a href=\"http:\/\/buhgalter-online.kz\/files\/sql\/balda_tsql.rar\">\u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/a>.<br \/>  \u0412\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0435\u043c \u0431\u0443\u043a\u0432\u044b \u00ab\u0415\u00bb \u0438 \u00ab\u0401\u00bb \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0443 (\u043a\u0430\u043a \u00ab\u0415\u00bb).<\/p>\n<p>  <b>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430:<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/75e\/e7b\/264\/75ee7b2648dd499d81137559c224324f.png\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-269119","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=269119"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269119\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=269119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=269119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=269119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}