{"id":280949,"date":"2016-11-14T21:25:03","date_gmt":"2016-11-14T18:25:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=280949"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=280949","title":{"rendered":"\u0423\u0442\u043a\u0438, \u0422\u0430\u0438\u043b\u0430\u043d\u0434 \u0438 T-SQL\u2026 \u0438\u043b\u0438 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 SQL Server?"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/175\/993\/204\/175993204615473ebce2501d20d9ad8f.png\"\/><\/p>\n<p>  \u0412\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u043e\u2026 \u0417\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0420\u0438\u0445\u0442\u0435\u0440\u043e\u043c \u0438 \u0443\u0441\u0438\u043b\u0435\u043d\u043d\u043e \u0448\u0442\u0443\u0434\u0438\u0440\u043e\u0432\u0430\u043b \u0428\u0438\u043b\u0434\u0442\u0430. \u0414\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 <i>.NET<\/i>, \u043d\u043e \u0441\u0443\u0434\u044c\u0431\u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0441\u044f\u0446\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u043d\u0430\u0447\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0432\u043e \u0432\u043d\u043e\u0432\u044c \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0434\u044b\u0440\u0443 \u0434\u043e\u043a\u0438\u043d\u0443\u043b\u0438 \u0441\u0432\u0435\u0436\u0435\u0433\u043e \u043b\u044e\u0434\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u043c\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 <i>SQL Server<\/i>. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0448\u043b\u043e \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 6 \u043b\u0435\u0442 \u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u0435\u2026<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0440\u043e \u0431\u044b\u0432\u0448\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0414\u0436\u043e\u0437\u0435\u0444\u0430 \u0438\u0437 \u0410\u043d\u0433\u043b\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0438\u043b \u0436\u0438\u0437\u043d\u044c, \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u0432 \u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0435, \u0438 \u0432 \u043c\u043e\u0435\u043c \u0441\u043a\u0430\u0439\u043f\u0435 \u0441\u0442\u0430\u043b \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0416\u043e\u0437\u0435\u0444\u0438\u043d\u043e\u0439. \u041f\u0440\u043e \u0432\u0435\u0441\u0435\u043b\u044b\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043f\u043e \u043e\u0444\u0438\u0441\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u0438\u0434\u0435\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435: \u043e\u0434\u0438\u043d \u0441\u0442\u0440\u0430\u0434\u0430\u043b \u043e\u0442 \u0430\u043b\u043b\u0435\u0440\u0433\u0438\u0438 \u043d\u0430 \u0441\u0432\u0435\u0436\u0438\u0439 \u0432\u043e\u0437\u0434\u0443\u0445, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u044f\u043b\u0441\u044f \u043e\u0442 \u043d\u0435\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043b\u044e\u0431\u0432\u0438 \u043a \u0421++ \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044f \u044d\u0442\u043e \u0430\u043b\u043b\u0435\u0440\u0433\u0438\u0435\u0439 \u043d\u0430 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u0432\u0435\u0442. \u041e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0442\u044c \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u043c \u043e\u0442\u0446\u043e\u043c \u0434\u0432\u0443\u0445 \u0434\u0435\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u0440\u043e\u0441\u0448\u0435\u0433\u043e \u0441\u043a\u0438\u043b\u0430\u043c\u0438 \u0441\u0435\u043d\u0438\u043e\u0440\u0430 \u043f\u043e <i>JS<\/i>.<\/p>\n<p>  \u041d\u043e \u0441\u0430\u043c\u044b\u0439 \u043b\u044e\u0442\u044b\u0439 \u0442\u0440\u0435\u0448, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u043f\u0440\u043e \u0440\u0435\u0437\u0438\u043d\u043e\u0432\u0443\u044e \u0443\u0442\u043a\u0443-\u043f\u0438\u0449\u0430\u043b\u043a\u0443. \u041e\u0434\u0438\u043d \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0441\u043d\u0438\u043c\u0430\u043b \u0435\u044e \u0441\u0442\u0440\u0435\u0441\u0441 \u0438, \u043e\u0434\u043d\u0430\u0436\u0434\u044b, \u0432 \u043f\u043e\u0440\u044b\u0432\u0435 \u044d\u043c\u043e\u0446\u0438\u0439, \u043e\u0442\u0433\u0440\u044b\u0437 \u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u0443. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0443\u0442\u043e\u0447\u043a\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430 \u043f\u0440\u0435\u0436\u043d\u0438\u0439 \u043b\u043e\u0441\u043a \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u043c\u044f\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u0433\u0440\u044b\u0437\u0442\u044c\u2026 \u0443\u0432\u044b, \u0443\u0436\u0435 \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>  \u041a \u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e? \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f\u2026 \u0442\u0430\u043a \u044d\u0442\u043e \u0441\u0442\u0440\u0435\u0441\u0441\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438. \u0412\u0442\u043e\u0440\u043e\u0435 \u2013 \u044d\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 <i>T-SQL<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0438\u0434\u044f\u0442 \u0438 \u043b\u043e\u043c\u0430\u044e\u0442 \u0433\u043e\u043b\u043e\u0432\u0443\u2026 \u043f\u043e\u0447\u0435\u043c\u0443 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/p>\n<h5><b>1. Data Types<\/b><\/h5>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 <i>SQL Server<\/i> \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0434\u0432\u0443\u043c\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438:<\/p>\n<pre><code class=\"sql\">DECLARE @Employees1 TABLE (       EmployeeID BIGINT PRIMARY KEY     , IsMale VARCHAR(3)     , BirthDate VARCHAR(20) ) INSERT INTO @Employees1 VALUES (123, 'YES', '2012-09-01')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"sql\">DECLARE @Employees2 TABLE (       EmployeeID INT PRIMARY KEY     , IsMale BIT     , BirthDate DATE ) INSERT INTO @Employees2 VALUES (123, 1, '2012-09-01')<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0447\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430:<\/p>\n<pre><code class=\"sql\">DECLARE @BirthDate DATE = '2012-09-01'  SELECT * FROM @Employees1 WHERE BirthDate = @BirthDate SELECT * FROM @Employees2 WHERE BirthDate = @BirthDate<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bae\/485\/ee0\/bae485ee0ca64c3f9d309885a7aee735.png\"\/><\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c. \u0417\u0430\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 <i>YES\/NO<\/i>? \u0417\u0430\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u0442\u0443 \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443? \u0417\u0430\u0447\u0435\u043c <i>BIGINT<\/i> \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c\u0438? \u0427\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 <i>INT<\/i> \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0435\u043b?<\/p>\n<p>  \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441 \u0434\u0438\u0441\u043a\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 <i>BufferPool<\/i> \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438 \u0435\u0449\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u0432\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u043d\u0430\u043a \u043e\u0431 \u044d\u0442\u043e\u043c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h5><b>2. *<\/b><\/h5>\n<p>  \u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c \u00ab\u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u043c\u0430\u0441\u043b\u043e\u043c\u00bb: \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 <i>DataReader <\/i>\u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b. \u042d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SET STATISTICS TIME, IO ON  SELECT * FROM Person.Person  SELECT BusinessEntityID      , FirstName      , MiddleName      , LastName FROM Person.Person  SET STATISTICS TIME, IO OFF<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430:<\/p>\n<pre><code class=\"1c\">Table 'Person'. Scan count 1, logical reads 3819, physical reads 3, ...  SQL Server Execution Times:    CPU time = 31 ms,  elapsed time = 1235 ms.  Table 'Person'. Scan count 1, logical reads 109, physical reads 1, ...  SQL Server Execution Times:    CPU time = 0 ms,  elapsed time = 227 ms.<\/code><\/pre>\n<p>  <\/p>\n<h5><b>3. Alias <\/b><\/h5>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  IF OBJECT_ID('Sales.UserCurrency') IS NOT NULL     DROP TABLE Sales.UserCurrency GO  CREATE TABLE Sales.UserCurrency (     CurrencyCode NCHAR(3) PRIMARY KEY ) INSERT INTO Sales.UserCurrency VALUES ('USD')<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM Sales.Currency WHERE CurrencyCode IN (             SELECT CurrencyCode             FROM Sales.UserCurrency         )<\/code><\/pre>\n<p>  \u0418 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <i>Sales.UserCurrency<\/i>:<\/p>\n<pre><code class=\"sql\">EXEC sys.sp_rename 'Sales.UserCurrency.CurrencyCode', 'Code', 'COLUMN'<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435 1 \u0441\u0442\u0440\u043e\u043a\u0430, \u0430 \u0432\u0441\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 <i>Sales.Currency<\/i>. \u041f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <i>SQL Server<\/i> \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b <i>Sales.UserCurrency<\/i> \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442 \u0442\u0430\u043c <i>CurrencyCode <\/i>\u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u0442 \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <i>Sales.Currency<\/i> \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>CurrencyCode = CurrencyCode<\/i> \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442.<\/p>\n<p>  \u041c\u043e\u0440\u0430\u043b\u044c \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0430\u043b\u0438\u0430\u0441\u044b:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM Sales.Currency c WHERE c.CurrencyCode IN (             SELECT u.CurrencyCode             FROM Sales.UserCurrency u         )<\/code><\/pre>\n<p>  <\/p>\n<h5><b>4. Column order<\/b><\/h5>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('dbo.DatePeriod') IS NOT NULL     DROP TABLE dbo.DatePeriod GO  CREATE TABLE dbo.DatePeriod (       StartDate DATE     , EndDate DATE )<\/code><\/pre>\n<p>  \u0418 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u0435 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0437 \u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u043a\u0430\u043a \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u044b:<\/p>\n<pre><code class=\"sql\">INSERT INTO dbo.DatePeriod SELECT '2015-01-01', '2015-01-31'<\/code><\/pre>\n<p>  \u041f\u043e\u0442\u043e\u043c \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432:<\/p>\n<pre><code class=\"sql\">CREATE TABLE dbo.DatePeriod (       EndDate DATE     , StartDate DATE )<\/code><\/pre>\n<p>  \u0418 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0436\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0432 \u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <i>INSERT<\/i>:<\/p>\n<pre><code class=\"sql\">INSERT INTO dbo.DatePeriod (StartDate, EndDate) SELECT '2015-01-01', '2015-01-31'<\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"sql\">SELECT TOP(1) * FROM dbo.DatePeriod ORDER BY 2 DESC<\/code><\/pre>\n<p>  \u041f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430? \u0410 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442, \u0442\u043e \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c.<\/p>\n<h5><b>5. NOT IN vs NULL<\/b><\/h5>\n<p>  \u0411\u0435\u0441\u0441\u043f\u043e\u0440\u043d\u044b\u0439 \u043b\u0438\u0434\u0435\u0440 \u0441\u0440\u0435\u0434\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 <i>Junior DB Developer<\/i> \u2014 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <i>NOT IN<\/i>.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <i>IN<\/i> \u0438 <i>NOT IN<\/i>:<\/p>\n<pre><code class=\"sql\">DECLARE @t1 TABLE (t1 INT, UNIQUE CLUSTERED(t1)) INSERT INTO @t1 VALUES (1), (2)  DECLARE @t2 TABLE (t2 INT, UNIQUE CLUSTERED(t2)) INSERT INTO @t2 VALUES (1)  SELECT * FROM @t1 WHERE t1 NOT IN (SELECT t2 FROM @t2)  SELECT * FROM @t1 WHERE t1 IN (SELECT t2 FROM @t2)<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0430\u043c \u0434\u0432\u043e\u0439\u043a\u0443, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 <i>NULL<\/i>:<\/p>\n<pre><code class=\"sql\">INSERT INTO @t2 VALUES (1), (NULL)<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 <i>NOT IN<\/i> \u043c\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u041d\u0435\u0443\u0436\u0435\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043c\u0430\u0433\u0438\u044f \u0432\u043c\u0435\u0448\u0430\u043b\u0430\u0441\u044c \u2014 <i>IN<\/i> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 <i>NOT IN<\/i> \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u00ab\u043f\u043e\u043d\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c\u00bb \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 <i>SQL Server<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0442\u0438\u0447\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439: <i>TRUE<\/i>, <i>FALSE<\/i>, <i>UNKNOWN<\/i>.<\/p>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 <i>SQL Server<\/i> \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>IN<\/i>:<\/p>\n<pre><code class=\"1c\">a IN (1, NULL)       ==   a=1 OR a=NULL<\/code><\/pre>\n<p>  <i>NOT IN<\/i>:<\/p>\n<pre><code class=\"1c\">a NOT IN (1, NULL)   ==   a&lt;&gt;1 AND a&lt;&gt;NULL<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 <i>NULL<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <i>UNKNOWN<\/i>. <i>1=NULL<\/i>, <i>NULL=NULL<\/i>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u2014 <i>UNKNOWN<\/i>. \u0410 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>AND<\/i>, \u0442\u043e \u0432\u0441\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e.<\/p>\n<p>  \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0443\u0447\u043d\u043e. \u041d\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0431\u044b\u043b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a <i>NOT NULL<\/i>, \u043f\u043e\u0442\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u043e\u0431\u0440\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0435 <i>NULL<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418\u0442\u043e\u0433: \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0447\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e <i>NULL<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u041c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c <i>NULL<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"sql\">SELECT * FROM @t1 WHERE t1 NOT IN (         SELECT t2         FROM @t2         WHERE t2 IS NOT NULL     )<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>EXCEPT<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT * FROM @t1 EXCEPT SELECT * FROM @t2<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e \u0434\u0443\u043c\u0430\u0442\u044c, \u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>NOT EXISTS<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT * FROM @t1 WHERE NOT EXISTS(         SELECT 1         FROM @t2         WHERE t1 = t2     )<\/code><\/pre>\n<p>  \u041a\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439? \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 <i>NOT EXISTS<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 <i>predicate pushdown<\/i> \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0441 <i>NULL<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0432\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SELECT COUNT_BIG(*) FROM Production.Product  SELECT COUNT_BIG(*) FROM Production.Product WHERE Color = 'Grey'  SELECT COUNT_BIG(*) FROM Production.Product WHERE Color &lt;&gt; 'Grey'<\/code><\/pre>\n<p>  \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u043b\u044f <i>NULL<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM Production.Product WHERE Color IS NULL  SELECT COUNT_BIG(*) FROM Production.Product WHERE Color IS NOT NULL<\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043a\u0443\u0440\u044c\u0435\u0437\u043d\u0435\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 <i>CHECK<\/i> \u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0439\u043d\u0442\u0430\u043c\u0438:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('tempdb.dbo.#temp') IS NOT NULL     DROP TABLE #temp GO  CREATE TABLE #temp (       Color VARCHAR(15) --NULL     , CONSTRAINT CK CHECK (Color IN ('Black', 'White')) )<\/code><\/pre>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u043b\u044b\u0435 \u0438 \u0447\u0435\u0440\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"sql\">INSERT INTO #temp VALUES ('Black')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">(1 row(s) affected)<\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c:<\/p>\n<pre><code class=\"sql\">INSERT INTO #temp VALUES ('Red')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">The INSERT statement conflicted with the CHECK constraint... The statement has been terminated.<\/code><\/pre>\n<p>  \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u043c <i>NULL<\/i>:<\/p>\n<pre><code class=\"sql\">INSERT INTO #temp VALUES (NULL)<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">(1 row(s) affected)<\/code><\/pre>\n<p>  \u041d\u0430\u0448 <i>CHECK<\/i> \u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0439\u043d\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f <i>NOT FALSE<\/i>, \u0442.\u0435. \u0438 <i>TRUE<\/i> \u0438 <i>UNKNOWN<\/i> \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u043c\u0438\u043b\u0443\u044e \u0434\u0443\u0448\u0443. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f: \u044f\u0432\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043a\u0430\u043a <i>NOT NULL<\/i> \u043b\u0438\u0431\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <i>NULL<\/i> \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0438.<\/p>\n<h5><b>6. Date format<\/b><\/h5>\n<p>  \u0415\u0449\u0435 \u0447\u0430\u0441\u0442\u043e \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u044e\u0430\u043d\u0441\u0430\u0445 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e GETDATE:<\/p>\n<pre><code class=\"sql\">SELECT GETDATE()<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u0438 \u0443\u0431\u0440\u0430\u043b\u0438 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<pre><code class=\"sql\">SELECT * FROM sys.objects WHERE create_date &lt; '2016-11-14'<\/code><\/pre>\n<p>  \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>  \u0414\u0430\u0442\u0430 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439, \u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 <i>SQL Server<\/i> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0435\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438:<\/p>\n<pre><code class=\"sql\">SET LANGUAGE English SET DATEFORMAT DMY  DECLARE @d1 DATETIME = '05\/12\/2016'       , @d2 DATETIME = '2016\/12\/05'       , @d3 DATETIME = '2016-12-05'       , @d4 DATETIME = '05-dec-2016'  SELECT @d1, @d2, @d3, @d4<\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0437\u0434\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f:<\/p>\n<pre><code class=\"1c\">----------- ----------- ----------- ----------- 2016-12-05  2016-05-12  2016-05-12  2016-12-05 <\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043d\u0435 \u043d\u0430\u0447\u043d\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"sql\">SET DATEFORMAT MDY  DECLARE @d1 DATETIME = '05\/12\/2016'       , @d2 DATETIME = '2016\/12\/05'       , @d3 DATETIME = '2016-12-05'       , @d4 DATETIME = '05-dec-2016'  SELECT @d1, @d2, @d3, @d4<\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0442\u043e\u043b\u043a\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u0430\u0442\u044b:<\/p>\n<pre><code class=\"1c\">----------- ----------- ----------- ----------- 2016-05-12  2016-12-05  2016-12-05  2016-12-05 <\/code><\/pre>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043a\u0430\u043a \u044f\u0432\u043d\u043e\u0439 \u0442\u0430\u043a \u0438 \u0441\u043a\u0440\u044b\u0442\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u0441\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"sql\">DECLARE @t TABLE (a DATETIME) INSERT INTO @t VALUES ('05\/13\/2016')<\/code><\/pre>\n<p>  \u0410 \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c:<\/p>\n<pre><code class=\"sql\">DECLARE @t TABLE (a DATETIME) SET DATEFORMAT DMY INSERT INTO @t VALUES ('05\/13\/2016')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Msg 242, Level 16, State 3, Line 28 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0432 \u043a\u0430\u043a\u043e\u043c \u0436\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0434\u0430\u0442? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"sql\">SET DATEFORMAT YMD  SET LANGUAGE English  DECLARE @d1 DATETIME = '2016\/01\/12'       , @d2 DATETIME = '2016-01-12'       , @d3 DATETIME = '12-jan-2016'       , @d4 DATETIME = '20160112'  SELECT @d1, @d2, @d3, @d4 GO  SET LANGUAGE Deutsch  DECLARE @d1 DATETIME = '2016\/01\/12'       , @d2 DATETIME = '2016-01-12'       , @d3 DATETIME = '12-jan-2016'       , @d4 DATETIME = '20160112'  SELECT @d1, @d2, @d3, @d4<\/code><\/pre>\n<p>  \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"1c\">----------- ----------- ----------- ----------- 2016-01-12  2016-01-12  2016-01-12  2016-01-12                                      ----------- ----------- ----------- ----------- 2016-12-01  2016-12-01  2016-01-12  2016-01-12 <\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0435\u0441\u044f\u0446 \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u00ab\u0436\u0435 \u043d\u0435 \u043c\u0430\u043d\u0436 \u043f\u0430 \u0441\u0438\u0441 \u0436\u0443\u0440\u00bb \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"sql\">SET LANGUAGE French DECLARE @d DATETIME = '12-jan-2016'<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Msg 241, Level 16, State 1, Line 29 \u00c9chec de la conversion de la date et\/ou de l'heure \u00e0 partir d'une cha\u00eene de caract\u00e8res.<\/code><\/pre>\n<p>  \u0418\u0442\u043e\u0433\u043e \u2014 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441 \u0434\u0430\u0442\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0442\u043e\u043b\u043a\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u0444\u0430\u0437\u044b \u041b\u0443\u043d\u044b, \u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u0438\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <i>YYYYMMDD<\/i> \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0442\u0438\u043b\u044c\u0434, \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0438 \u0441\u043b\u0435\u0448\u0435\u0439.<\/p>\n<p>  \u0415\u0449\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"sql\">SET LANGUAGE English SET DATEFORMAT YMD  DECLARE @d1 DATE = '2016-01-12'       , @d2 DATETIME = '2016-01-12'  SELECT @d1, @d2 GO  SET LANGUAGE Deutsch SET DATEFORMAT DMY  DECLARE @d1 DATE = '2016-01-12'       , @d2 DATETIME = '2016-01-12'  SELECT @d1, @d2<\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 <i>DATETIME<\/i>, \u0442\u0438\u043f <i>DATE<\/i> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435:<\/p>\n<pre><code class=\"1c\">---------- ---------- 2016-01-12 2016-01-12  ---------- ---------- 2016-01-12 2016-12-01<\/code><\/pre>\n<p>  \u041d\u043e \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u044e\u0430\u043d\u0441 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435? \u0412\u0440\u044f\u0434 \u043b\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <i>YYYYMMDD<\/i> \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<h5><b>7. Date filter<\/b><\/h5>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0430 <i>DATETIME\/DATE<\/i> \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0441 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u0438 \u043d\u0430\u0447\u043d\u0435\u043c:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  UPDATE TOP(1) dbo.DatabaseLog SET PostTime = '20140716 12:12:12'<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u043d\u044c:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE PostTime = '20140716'<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u0435\u0440\u043d\u0435\u0442 0. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 <i>SQL Server<\/i> \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u043a \u0442\u0438\u043f\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a8c\/dfe\/49b\/a8cdfe49b2b54b73ab70bf0658c2c0a5.png\"\/><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441:<\/p>\n<pre><code class=\"sql\">CREATE NONCLUSTERED INDEX IX_PostTime ON dbo.DatabaseLog (PostTime)<\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE CONVERT(CHAR(8), PostTime, 112) = '20140716'  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE CAST(PostTime AS DATE) = '20140716'<\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE PostTime BETWEEN '20140716' AND '20140716 23:59:59.997'  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE PostTime &gt;= '20140716' AND PostTime &lt; '20140717'<\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0418 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0435\u0442 \u043f\u043e\u0438\u0441\u043a, \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0437\u043a\u043e \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f (\u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430):<\/p>\n<pre><code class=\"1c\">Table 'DatabaseLog'. Scan count 1, logical reads 7, ... Table 'DatabaseLog'. Scan count 1, logical reads 2, ...<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0435 <i>PostTime<\/i> \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043f\u0440\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c. \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446. \u0427\u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<pre><code class=\"sql\">SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE CONVERT(CHAR(8), PostTime, 112) LIKE '201407%'  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE DATEPART(YEAR, PostTime) = 2014     AND DATEPART(MONTH, PostTime) = 7  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE YEAR(PostTime) = 2014     AND MONTH(PostTime) = 7  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE EOMONTH(PostTime) = '20140731'  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE PostTime &gt;= '20140701' AND PostTime &lt; '20140801'<\/code><\/pre>\n<p>  \u0418 \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c, \u0447\u0435\u043c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7c0\/021\/c84\/7c0021c849a14d0ab9d2acaa7a9bf71d.png\"\/><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441:<\/p>\n<pre><code class=\"sql\">IF COL_LENGTH('dbo.DatabaseLog', 'MonthLastDay') IS NOT NULL     ALTER TABLE dbo.DatabaseLog DROP COLUMN MonthLastDay GO  ALTER TABLE dbo.DatabaseLog     ADD MonthLastDay AS EOMONTH(PostTime) --PERSISTED GO  CREATE INDEX IX_MonthLastDay ON dbo.DatabaseLog (MonthLastDay)<\/code><\/pre>\n<p>  \u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f (\u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b):<\/p>\n<pre><code class=\"sql\">SET STATISTICS IO ON  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE PostTime &gt;= '20140701' AND PostTime &lt; '20140801'  SELECT COUNT_BIG(*) FROM dbo.DatabaseLog WHERE MonthLastDay = '20140731'  SET STATISTICS IO OFF<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Table 'DatabaseLog'. Scan count 1, logical reads 7, ... Table 'DatabaseLog'. Scan count 1, logical reads 3, ...<\/code><\/pre>\n<p>  <\/p>\n<h5><b>8. \u0421alculation<\/b><\/h5>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043b\u044e\u0431\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0441\u043d\u0438\u0436\u0430\u044e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SET STATISTICS IO ON  SELECT BusinessEntityID FROM Person.Person WHERE BusinessEntityID * 2 = 10000  SELECT BusinessEntityID FROM Person.Person WHERE BusinessEntityID = 2500 * 2  SELECT BusinessEntityID FROM Person.Person WHERE BusinessEntityID = 5000<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Table 'Person'. Scan count 1, logical reads 67, ... Table 'Person'. Scan count 0, logical reads 3, ...<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <i>SQL Server<\/i> \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <i>IndexScan<\/i>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/12d\/53b\/f6b\/12d53bf6bcbc4f99ba2343255541293f.png\"\/><\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u043c \u043f\u043e\u043b\u0435, \u043d\u0435\u0442 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c <i>IndexSeek<\/i>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bc1\/673\/eb9\/bc1673eb9ed6417b9b674da64608fd80.png\"\/><\/p>\n<h5><b>9. Convert implicit<\/b><\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SELECT BusinessEntityID, NationalIDNumber FROM HumanResources.Employee WHERE NationalIDNumber = 30845  SELECT BusinessEntityID, NationalIDNumber FROM HumanResources.Employee WHERE NationalIDNumber = '30845'<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0f7\/cff\/067\/0f7cff06737f472db1abbcd9125737ae.png\"\/><\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 <i>IndexScan<\/i>, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 <i>IndexSeek<\/i>:<\/p>\n<pre><code class=\"1c\">Table 'Employee'. Scan count 1, logical reads 4, ... Table 'Employee'. Scan count 0, logical reads 2, ...<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e? \u0421\u0442\u043e\u043b\u0431\u0435\u0446 <i>NationalIDNumber<\/i> \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 <i>NVARCHAR(15)<\/i>. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043a\u0430\u043a <i>INT<\/i> \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0422\u0430\u043a\u043e\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0435, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0436\u0438\u0434\u0430\u0442\u044c. \u041d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043e\u0448\u0438\u0431\u043a\u0430\u043c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u043e\u043b\u0435 PostalCode \u0431\u044b\u043b\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0448\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0440\u0445\u0443, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u044b. \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438, \u043d\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0442\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"sql\">SELECT AddressID FROM Person.[Address] WHERE PostalCode = 92700  SELECT AddressID FROM Person.[Address] WHERE PostalCode = '92700'<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Msg 245, Level 16, State 1, Line 16 Conversion failed when converting the nvarchar value 'K4B 1S2' to data type int.<\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>EntityFramework<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u043a <i>Unicode<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT CustomerID, AccountNumber FROM Sales.Customer WHERE AccountNumber = N'AW00000009'  SELECT CustomerID, AccountNumber FROM Sales.Customer WHERE AccountNumber = 'AW00000009'<\/code><\/pre>\n<p>  \u0418 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/05b\/f9e\/67f\/05bf9e67f1b447d3a32e8f48b1a0a124.png\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438.<\/p>\n<h5><b>10. LIKE &#038; Suppressed index<\/b><\/h5>\n<p>  \u0414\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0435\u0449\u0435 \u043d\u0435 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441\u2026<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SET STATISTICS IO ON  SELECT AddressLine1 FROM Person.[Address] WHERE SUBSTRING(AddressLine1, 1, 3) = '100'  SELECT AddressLine1 FROM Person.[Address] WHERE LEFT(AddressLine1, 3) = '100'  SELECT AddressLine1 FROM Person.[Address] WHERE CAST(AddressLine1 AS CHAR(3)) = '100'  SELECT AddressLine1 FROM Person.[Address] WHERE AddressLine1 LIKE '100%'<\/code><\/pre>\n<p>  \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"1c\">Table 'Address'. Scan count 1, logical reads 216, ... Table 'Address'. Scan count 1, logical reads 216, ... Table 'Address'. Scan count 1, logical reads 216, ... Table 'Address'. Scan count 1, logical reads 4, ...<\/code><\/pre>\n<p>  \u041f\u043b\u0430\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/5f0\/a23\/9d2\/5f0a239d29194e5d96ba559b4fc598ff.png\"\/><\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u043c, \u043e \u0447\u0435\u043c \u043c\u044b \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441, \u0442\u043e \u043d\u0430 \u043d\u0435\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432, \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <i>SQL Server<\/i>.<\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443? \u042d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u043a\u0430 \u0443\u0436\u0435 \u044f\u0432\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435:<\/p>\n<pre><code class=\"sql\">SELECT AddressLine1 FROM Person.[Address] WHERE AddressLine1 LIKE '%100%'<\/code><\/pre>\n<p>  \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<h5><b>11. Unicode vs ANSI<\/b><\/h5>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u2014 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 <i>UNICODE<\/i> \u0438 <i>ANSI<\/i>. \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <i>NVARCHAR\/NCHAR<\/i> (\u043f\u043e 2 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b \u2014 \u0443\u0432\u044b <i>UTF8<\/i> \u043d\u0435 \u0437\u0430\u0432\u0435\u0437\u043b\u0438). \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f <i>ANSI<\/i> \u0441\u0442\u0440\u043e\u043a \u2014 <i>VARCHAR\/CHAR<\/i> (1 \u0431\u0430\u0439\u0442 \u2014 1 \u0441\u0438\u043c\u0432\u043e\u043b). \u0415\u0441\u0442\u044c \u0435\u0449\u0435 <i>TEXT\/NTEXT<\/i>, \u043d\u043e \u043f\u0440\u043e \u043d\u0438\u0445 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c).<\/p>\n<p>  \u0418 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c, \u043d\u043e \u043d\u0435\u0442\u2026<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b <i>N<\/i>. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"sql\">SELECT '\u6587\u672c ANSI'     , N'\u6587\u672c UNICODE'<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">------- ------------ ?? ANSI \u6587\u672c UNICODE<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c <i>N<\/i> \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439, \u0442\u043e <i>SQL Server<\/i> \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 <i>ANSI<\/i> \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442, \u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u0437\u043d\u0430\u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0430.<\/p>\n<h5><b>12. COLLATE<\/b><\/h5>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u044e\u0431\u044f\u0442 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e <i>Middle\/Senior DB Developer<\/i>. \u0412\u0435\u0440\u043d\u0435\u0442 \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441?<\/p>\n<pre><code class=\"sql\">DECLARE @a NCHAR(1) = '\u0401'       , @b NCHAR(1) = '\u0424'  SELECT @a, @b WHERE @a = @b<\/code><\/pre>\n<p>  \u0418 \u0434\u0430\u2026 \u0438 \u043d\u0435\u0442\u2026 \u0422\u0443\u0442 \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0437\u0435\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u044f \u0442\u0430\u043a \u043e\u0442\u0432\u0435\u0447\u0430\u044e.<\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 N, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a <i>ANSI<\/i>. \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e <i>COLLATE<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<pre><code class=\"sql\">USE [master] GO  IF DB_ID('test') IS NOT NULL BEGIN     ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE     DROP DATABASE test END GO  CREATE DATABASE test COLLATE Latin1_General_100_CI_AS GO  USE test GO  DECLARE @a NCHAR(1) = '\u0401'       , @b NCHAR(1) = '\u0424'  SELECT @a, @b WHERE @a = @b<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c <i>COLLATE<\/i> \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u043d\u0430\u043a\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0437\u043d\u0430\u043a\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0430\u0432\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439:<\/p>\n<pre><code class=\"1c\">---- ---- ?    ?<\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <i>COLLATE<\/i> \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0439:<\/p>\n<pre><code class=\"sql\">ALTER DATABASE test COLLATE Cyrillic_General_100_CI_AS<\/code><\/pre>\n<p>  \u0418 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0440\u0430\u043b\u044c \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c <i>UNICODE<\/i>, \u0442\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u043b\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u044c <i>N<\/i> \u043f\u0435\u0440\u0435\u0434 \u043d\u0435\u0439. \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 <i>N<\/i> \u043b\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e, \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435).<\/p>\n<p>  \u0427\u0442\u043e \u0435\u0449\u0435 \u044f \u0437\u0430\u0431\u044b\u043b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u043f\u0440\u043e \u0441\u0442\u0440\u043e\u043a\u0438? \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430 \u00ab\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u00bb:<\/p>\n<pre><code class=\"sql\">DECLARE       @a VARCHAR(10) = 'TEXT'      , @b VARCHAR(10) = 'text'  SELECT IIF(@a = @b, 'TRUE', 'FALSE')<\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u0430\u0432\u043d\u044b? \u0418 \u0434\u0430\u2026 \u0438 \u043d\u0435\u0442\u2026 \u041e\u043f\u044f\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0431\u044b \u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c <i>COLLATE<\/i>:<\/p>\n<pre><code class=\"sql\">DECLARE       @a VARCHAR(10) = 'TEXT'      , @b VARCHAR(10) = 'text'  SELECT IIF(@a COLLATE Latin1_General_CS_AS = @b COLLATE Latin1_General_CS_AS, 'TRUE', 'FALSE')<\/code><\/pre>\n<p>  \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <i>COLLATE<\/i> \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 (<i>CS<\/i>), \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (<i>CI<\/i>) \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u0441\u0442\u0440\u043e\u043a. \u0420\u0430\u0437\u043d\u044b\u0435 <i>COLLATE<\/i> \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u2014 \u044d\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<p>  \u0415\u0449\u0435 \u0432\u0435\u0441\u0435\u043b\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 <i>COLLATE<\/i> \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0438 <i>tempdb<\/i> \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 \u0441 <i>COLLATE<\/i>, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u043e\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e:<\/p>\n<pre><code class=\"sql\">USE [master] GO  IF DB_ID('test') IS NOT NULL BEGIN     ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE     DROP DATABASE test END GO  CREATE DATABASE test COLLATE Albanian_100_CS_AS GO  USE test GO  CREATE TABLE t (c CHAR(1)) INSERT INTO t VALUES ('a') GO  IF OBJECT_ID('tempdb.dbo.#t1') IS NOT NULL     DROP TABLE #t1 IF OBJECT_ID('tempdb.dbo.#t2') IS NOT NULL     DROP TABLE #t2 IF OBJECT_ID('tempdb.dbo.#t3') IS NOT NULL     DROP TABLE #t3 GO  CREATE TABLE #t1 (c CHAR(1)) INSERT INTO #t1 VALUES ('a')  CREATE TABLE #t2 (c CHAR(1) COLLATE database_default) INSERT INTO #t2 VALUES ('a')  SELECT c = CAST('a' AS CHAR(1)) INTO #t3  DECLARE @t TABLE (c VARCHAR(100)) INSERT INTO @t VALUES ('a')  SELECT 'tempdb', DATABASEPROPERTYEX('tempdb', 'collation') UNION ALL SELECT 'test',   DATABASEPROPERTYEX(DB_NAME(), 'collation') UNION ALL SELECT 't',   SQL_VARIANT_PROPERTY(c, 'collation') FROM t UNION ALL SELECT '#t1', SQL_VARIANT_PROPERTY(c, 'collation') FROM #t1 UNION ALL SELECT '#t2', SQL_VARIANT_PROPERTY(c, 'collation') FROM #t2 UNION ALL SELECT '#t3', SQL_VARIANT_PROPERTY(c, 'collation') FROM #t3 UNION ALL SELECT '@t',  SQL_VARIANT_PROPERTY(c, 'collation') FROM @t<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <i>COLLATE<\/i> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u2014 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f <i>COLLATE<\/i>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 <i>COLLATE<\/i> \u043e\u0442 \u0431\u0430\u0437\u044b <i>tempdb<\/i>.<\/p>\n<pre><code class=\"sql\">------ -------------------------- tempdb Cyrillic_General_CI_AS test   Albanian_100_CS_AS t      Albanian_100_CS_AS #t1    Cyrillic_General_CI_AS #t2    Albanian_100_CS_AS #t3    Albanian_100_CS_AS @t     Albanian_100_CS_AS<\/code><\/pre>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 <i>#t1<\/i>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 <i>COLLATE<\/i> \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u2014 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <i>COLLATE<\/i> \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440:<\/p>\n<pre><code class=\"sql\">SELECT * FROM #t1 WHERE c = 'A'<\/code><\/pre>\n<p>  \u041b\u0438\u0431\u043e <i>SQL Server<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f <i>COLLATE<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT * FROM #t1 JOIN t ON [#t1].c = t.c<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u0441\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u0430 \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0431\u044d\u043a\u0430\u043f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"1c\">Msg 468, Level 16, State 9, Line 93 Cannot resolve the collation conflict between &quot;Albanian_100_CS_AS&quot; and &quot;Cyrillic_General_CI_AS&quot; in the equal to operation.<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u0438:<\/p>\n<pre><code class=\"sql\">SELECT * FROM #t1 JOIN t ON [#t1].c = t.c COLLATE database_default<\/code><\/pre>\n<p>  <\/p>\n<h5><b>13. BINARY COLLATE<\/b><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u00ab\u043b\u043e\u0436\u043a\u0430 \u0434\u0435\u0433\u0442\u044f\u00bb \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>COLLATE<\/i> \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0439 \u0434\u043b\u044f \u0441\u0435\u0431\u044f. \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435?<\/p>\n<pre><code class=\"sql\">SELECT AddressLine1 FROM Person.[Address] WHERE AddressLine1 LIKE '%100%'<\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u0438\u0434\u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"sql\">USE [master] GO  IF DB_ID('test') IS NOT NULL BEGIN     ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE     DROP DATABASE test END GO  CREATE DATABASE test COLLATE Latin1_General_100_CS_AS GO ALTER DATABASE test MODIFY FILE (NAME = N'test', SIZE = 64MB) GO ALTER DATABASE test MODIFY FILE (NAME = N'test_log', SIZE = 64MB) GO  USE test GO  CREATE TABLE t (      ansi VARCHAR(100) NOT NULL    , unicod NVARCHAR(100) NOT NULL ) GO  ;WITH     E1(N) AS (         SELECT * FROM (             VALUES                 (1),(1),(1),(1),(1),                 (1),(1),(1),(1),(1)         ) t(N)     ),     E2(N) AS (SELECT 1 FROM E1 a, E1 b),     E4(N) AS (SELECT 1 FROM E2 a, E2 b),     E8(N) AS (SELECT 1 FROM E4 a, E4 b) INSERT INTO t SELECT v, v FROM (     SELECT TOP(50000) v = REPLACE(CAST(NEWID() AS VARCHAR(36)) + CAST(NEWID() AS VARCHAR(36)), '-', '')     FROM E8 ) t<\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438 <i>COLLATE<\/i>, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b:<\/p>\n<pre><code class=\"sql\">ALTER TABLE t     ADD ansi_bin AS UPPER(ansi) COLLATE Latin1_General_100_Bin2  ALTER TABLE t     ADD unicod_bin AS UPPER(unicod) COLLATE Latin1_General_100_BIN2  CREATE NONCLUSTERED INDEX ansi ON t (ansi) CREATE NONCLUSTERED INDEX unicod ON t (unicod)  CREATE NONCLUSTERED INDEX ansi_bin ON t (ansi_bin) CREATE NONCLUSTERED INDEX unicod_bin ON t (unicod_bin)<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"sql\">SET STATISTICS TIME, IO ON  SELECT COUNT_BIG(*) FROM t WHERE ansi LIKE '%AB%'  SELECT COUNT_BIG(*) FROM t WHERE unicod LIKE '%AB%'  SELECT COUNT_BIG(*) FROM t WHERE ansi_bin LIKE '%AB%' --COLLATE Latin1_General_100_BIN2  SELECT COUNT_BIG(*) FROM t WHERE unicod_bin LIKE '%AB%' --COLLATE Latin1_General_100_BIN2  SET STATISTICS TIME, IO OFF<\/code><\/pre>\n<p>  \u0418 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u044f\u0442:<\/p>\n<pre><code class=\"1c\">SQL Server Execution Times: CPU time = 350 ms, elapsed time = 354 ms.  SQL Server Execution Times: CPU time = 335 ms, elapsed time = 355 ms.  SQL Server Execution Times: CPU time = 16 ms, elapsed time = 18 ms.  SQL Server Execution Times: CPU time = 17 ms, elapsed time = 18 ms.<\/code><\/pre>\n<p>  \u0412\u0441\u044f \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a, \u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441 <i>COLLATE<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <i>BIN<\/i>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 <i>COLLATE<\/i> \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438.<\/p>\n<h5><b>14. Code style<\/b><\/h5>\n<p>  \u0421\u0442\u0438\u043b\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0445\u0430\u043e\u0441 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0432\u0441\u0435 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b. \u0421\u0430\u043c\u043e\u0435 \u043f\u0430\u0440\u0430\u0434\u043e\u043a\u0441\u0430\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u0437\u0430 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u044f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u0432\u043e\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0412\u0441\u0435 \u0438\u0445 \u043f\u0438\u0448\u0443\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u00ab\u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e\u00bb. \u0425\u043e\u0442\u044f \u043f\u043e\u0442\u043e\u043c \u0440\u0438\u0441\u043a\u0443\u044e\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0445\u043b\u0435\u0431\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u043d\u0435\u0439:<\/p>\n<pre><code class=\"sql\">USE [master] GO  IF DB_ID('test') IS NOT NULL BEGIN     ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE     DROP DATABASE test END GO  CREATE DATABASE test COLLATE Latin1_General_CI_AS GO  USE test GO  CREATE TABLE dbo.Employee (EmployeeID INT PRIMARY KEY)<\/code><\/pre>\n<p>  \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">select employeeid from employee<\/code><\/pre>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <i>COLLATE<\/i> \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439:<\/p>\n<pre><code class=\"sql\">ALTER DATABASE test COLLATE Latin1_General_CS_AI<\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"1c\">Msg 208, Level 16, State 1, Line 19 Invalid object name 'employee'.<\/code><\/pre>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e <i>COLLATE<\/i> \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0422\u043e\u0447\u043d\u0435\u0435, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446, \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0437\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435.<\/p>\n<p>  \u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442 \u0434\u0435\u043b\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438\u2026<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0438\u0445 <i>COLLATE<\/i> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 \u0431\u0430\u0437\u044b <i>master<\/i>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438:<\/p>\n<pre><code class=\"sql\">SELECT DATABASEPROPERTYEX('master', 'collation') DECLARE @EmpID INT = 1 SELECT @empid<\/code><\/pre>\n<p>  \u0422\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442:<\/p>\n<pre><code class=\"1c\">----------------------- Cyrillic_General_CI_AS  ----------- 1<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043e \u0441\u0435\u0431\u0435 \u0437\u043d\u0430\u0442\u044c:<\/p>\n<pre><code class=\"1c\">-------------------------- Latin1_General_CS_AS<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">Msg 137, Level 15, State 2, Line 4 Must declare the scalar variable &quot;@empid&quot;.<\/code><\/pre>\n<p>  <\/p>\n<h5><b>15. [var]char<\/b><\/h5>\n<p>  \u041d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 (<i>CHAR<\/i>, <i>NCHAR<\/i>) \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 (<i>VARCHAR<\/i>, <i>NVARCHAR<\/i>):<\/p>\n<pre><code class=\"sql\">DECLARE @a CHAR(20)    = 'text'       , @b VARCHAR(20) = 'text'  SELECT LEN(@a)      , LEN(@b)      , DATALENGTH(@a)      , DATALENGTH(@b)      , '&quot;' + @a + '&quot;'      , '&quot;' + @b + '&quot;'  SELECT [a = b] =    IIF(@a = @b, 'TRUE', 'FALSE')      , [b = a] =    IIF(@b = @a, 'TRUE', 'FALSE')      , [a LIKE b] = IIF(@a LIKE @b, 'TRUE', 'FALSE')      , [b LIKE a] = IIF(@b LIKE @a, 'TRUE', 'FALSE')<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0441\u043a\u0430\u0436\u0435\u043c \u0432 20 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u043e \u0432 \u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e 4, \u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <i>SQL Server<\/i> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 16 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0441\u043f\u0440\u0430\u0432\u0430 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 LEN \u0438 DATALENGTH \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443):<\/p>\n<pre><code class=\"sql\">--- --- ---- ---- ---------------------- ---------------------- 4   4   20   4    &quot;text                &quot; &quot;text&quot;<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u2014 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f:<\/p>\n<pre><code class=\"sql\">a = b b = a a LIKE b b LIKE a ----- ----- -------- -------- TRUE  TRUE  TRUE     FALSE<\/code><\/pre>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>LIKE<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT 1 WHERE 'a ' LIKE 'a'  SELECT 1 WHERE 'a' LIKE 'a ' -- !!!  SELECT 1 WHERE 'a' LIKE 'a'  SELECT 1 WHERE 'a' LIKE 'a%'<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0431\u0435\u043b\u044b \u0443 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438.<\/p>\n<h5><b>16. Data length<\/b><\/h5>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0442\u044b\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0433\u0440\u0430\u0431\u043b\u0438:<\/p>\n<pre><code class=\"sql\">DECLARE @a DECIMAL       , @b VARCHAR(10) = '0.1'       , @c SQL_VARIANT  SELECT @a = @b      , @c = @a  SELECT @a      , @c      , SQL_VARIANT_PROPERTY(@c,'BaseType')      , SQL_VARIANT_PROPERTY(@c,'Precision')      , SQL_VARIANT_PROPERTY(@c,'Scale')<\/code><\/pre>\n<p>  \u0412 \u0447\u0435\u043c \u0441\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b? \u042f\u0432\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430 \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u00ab\u0432\u0440\u043e\u0434\u0435 \u0446\u0435\u043b\u043e\u0435\u00bb:<\/p>\n<pre><code class=\"1c\">---- ---- ---------- ----- ----- 0    0    decimal    18    0<\/code><\/pre>\n<p>  \u0421\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0432\u0435\u0441\u0435\u043b\u0435\u0435:<\/p>\n<pre><code class=\"sql\">DECLARE @t1 VARCHAR(MAX) = '123456789_123456789_123456789_123456789_' DECLARE @t2 VARCHAR = @t1  SELECT LEN(@t1)      , @t1      , LEN(@t2)      , @t2      , LEN(CONVERT(VARCHAR, @t1))      , LEN(CAST(@t1 AS VARCHAR))<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u044f\u0432\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 1 \u0441\u0438\u043c\u0432\u043e\u043b:<\/p>\n<pre><code class=\"1c\">----- ------------------------------------------ ---- ---- ---- ---- 40    123456789_123456789_123456789_123456789_   1    1    30   30<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0432 <i>CAST\/CONVERT<\/i>, \u0442\u043e \u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 30 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<h5><b>17. ISNULL vs COALESCE<\/b><\/h5>\n<p>  \u0427\u0442\u043e \u0435\u0449\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c? \u0415\u0441\u0442\u044c \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <i>ISNULL<\/i> \u0438 <i>COALESCE<\/i>. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>NULL<\/i>, \u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e <i>COALESCE<\/i>. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u0442\u044c \u043a\u043e\u0432\u0430\u0440\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.<\/p>\n<p>  \u0427\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438?<\/p>\n<pre><code class=\"sql\">DECLARE @a CHAR(1) = NULL SELECT ISNULL(@a, 'NULL'), COALESCE(@a, 'NULL')  DECLARE @i INT = NULL SELECT ISNULL(@i, 7.1), COALESCE(@i, 7.1)<\/code><\/pre>\n<p>  \u041e\u0442\u0432\u0435\u0442 \u0438 \u0432\u043f\u0440\u0430\u0432\u0434\u0443 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439:<\/p>\n<pre><code class=\"sql\">---- ---- N    NULL  ---- ---- 7    7.1<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443? \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>ISNULL<\/i> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043a \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432. <i>COALESCE<\/i> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043a \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u043c\u0443 \u0442\u0438\u043f\u0443. \u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0443\u044e \u0440\u0430\u0434\u043e\u0441\u0442\u044c, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u043f\u0440\u043e\u0441\u0438\u0434\u0435\u043b \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u043f\u043e\u043d\u044f\u0442\u044c, \u00ab\u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a\u00bb.<\/p>\n<p>  \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, <i>ISNULL<\/i> \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435, <i>COALESCE<\/i> \u0436\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <i>CASE WHEN<\/i> \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<h5><b>18. Math<\/b><\/h5>\n<p>  \u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0448\u044c\u0441\u044f \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u043d\u0430 <i>SQL Server<\/i>. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c:<\/p>\n<pre><code class=\"sql\">SELECT 1 \/ 3 SELECT 1.0 \/ 3<\/code><\/pre>\n<p>  \u041d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0435\u0441\u0442\u044c \u2014 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435. \u0415\u0441\u043b\u0438 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435, \u0442\u043e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c:<\/p>\n<pre><code class=\"1c\">----------- 0  ----------- 0.333333<\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"sql\">SELECT COUNT(*)      , COUNT(1)      , COUNT(val)      , COUNT(DISTINCT val)      , SUM(val)      , SUM(DISTINCT val) FROM (     VALUES (1), (2), (2), (NULL), (NULL) ) t (val)  SELECT AVG(val)      , SUM(val) \/ COUNT(val)      , AVG(val * 1.)      , AVG(CAST(val AS FLOAT)) FROM (     VALUES (1), (2), (2), (NULL), (NULL) ) t (val)<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441? <i>COUNT(*)\/COUNT(1)<\/i> \u0432\u0435\u0440\u043d\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a. <i>COUNT<\/i> \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0432\u0435\u0440\u043d\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 <i>NULL<\/i> \u0441\u0442\u0440\u043e\u043a. \u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <i>DISTINCT<\/i>, \u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 <i>NULL<\/i>.<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0441 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <i>AVG<\/i> \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0430 <i>SUM<\/i> \u0438 <i>COUNT<\/i>. \u0418 \u0442\u0443\u0442 \u043c\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f <i>NULL<\/i>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435, \u0442\u043e \u043a\u0430\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442? \u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439. \u041e\u0431 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442.<\/p>\n<h5><b>19. UNION vs UNION ALL<\/b><\/h5>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f, \u0438 \u043d\u0430\u0441 \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u044e\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b, \u0442\u043e, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>UNION ALL<\/i>. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0442\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <i>UNION<\/i>.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u0433\u0434\u0430 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>UNION ALL<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT [object_id] FROM sys.system_objects UNION SELECT [object_id] FROM sys.objects  SELECT [object_id] FROM sys.system_objects UNION ALL SELECT [object_id] FROM sys.objects<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b28\/a10\/166\/b28a10166199426bad971ce29d2f7881.png\"\/><\/p>\n<p>  \u0415\u0449\u0435 \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438: \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>UNION<\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0430 <i>UNION ALL<\/i> \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0418 \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u0430\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c 1 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<pre><code class=\"sql\">DECLARE @AddressLine NVARCHAR(60) SET @AddressLine = '4775 Kentucky Dr.'  SELECT TOP(1) AddressID FROM Person.[Address] WHERE AddressLine1 = @AddressLine     OR AddressLine2 = @AddressLine<\/code><\/pre>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <i>OR<\/i> \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 <i>IndexScan<\/i>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/501\/d93\/2d1\/501d932d1c2b41f78e7c468de51f16e7.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'Address'. Scan count 1, logical reads 90, ...<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <i>UNION ALL<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT TOP(1) AddressID FROM (     SELECT TOP(1) AddressID     FROM Person.[Address]     WHERE AddressLine1 = @AddressLine      UNION ALL      SELECT TOP(1) AddressID     FROM Person.[Address]     WHERE AddressLine2 = @AddressLine ) t<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430, <i>SQL Server<\/i> \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c 1 \u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0438 \u0434\u0430\u043b\u0435\u0435 \u043d\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a9d\/317\/35b\/a9d31735b4f94356b7c22f8866b7dc2d.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'Worktable'. Scan count 0, logical reads 0, ... Table 'Address'. Scan count 1, logical reads 3, ...<\/code><\/pre>\n<p>  <\/p>\n<h5><b>20. Re-read<\/b><\/h5>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e <i>JOIN<\/i> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0433\u043e\u0440\u0434\u0438\u043b\u043e\u0441\u044c \u043a\u0443\u0447\u0430 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SET STATISTICS IO ON  SELECT e.BusinessEntityID     , (         SELECT p.LastName         FROM Person.Person p         WHERE e.BusinessEntityID = p.BusinessEntityID       )     , (         SELECT p.FirstName         FROM Person.Person p         WHERE e.BusinessEntityID = p.BusinessEntityID       ) FROM HumanResources.Employee e  SELECT e.BusinessEntityID      , p.LastName      , p.FirstName FROM HumanResources.Employee e JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID<\/code><\/pre>\n<p>  \u0412\u0435\u0434\u044c \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"1c\">Table 'Person'. Scan count 0, logical reads 1776, ... Table 'Employee'. Scan count 1, logical reads 2, ...  Table 'Person'. Scan count 0, logical reads 888, ... Table 'Employee'. Scan count 1, logical reads 2, ...<\/code><\/pre>\n<p>  <\/p>\n<h5><b>21. SubQuery<\/b><\/h5>\n<p>  \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u043e\u0434\u0438\u043d-\u043a-\u043e\u0434\u043d\u043e\u043c\u0443.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 <i>Person.Person<\/i> \u0438 <i>Sales.SalesPersonQuotaHistory<\/i> \u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u044c, \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u0432\u043e\u0442\u044b.<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SET STATISTICS IO ON  SELECT p.BusinessEntityID      , (         SELECT s.SalesQuota         FROM Sales.SalesPersonQuotaHistory s         WHERE s.BusinessEntityID = p.BusinessEntityID       ) FROM Person.Person p<\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0438 \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<pre><code class=\"1c\">Msg 512, Level 16, State 1, Line 6 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, &lt;, &lt;= , &gt;, &gt;= or when the subquery is used as an expression.<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b?<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <i>TOP(1)<\/i> \u0438 <i>ORDER BY<\/i>, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0448\u043b\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <i>TOP<\/i> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <i>IndexSeek<\/i>. \u041a \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <i>OUTER\/CROSS APPLY<\/i> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <i>TOP<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT p.BusinessEntityID      , (         SELECT TOP(1) s.SalesQuota         FROM Sales.SalesPersonQuotaHistory s         WHERE s.BusinessEntityID = p.BusinessEntityID         ORDER BY s.QuotaDate DESC       ) FROM Person.Person p  SELECT p.BusinessEntityID      , t.SalesQuota FROM Person.Person p OUTER APPLY (     SELECT TOP(1) s.SalesQuota     FROM Sales.SalesPersonQuotaHistory s     WHERE s.BusinessEntityID = p.BusinessEntityID     ORDER BY s.QuotaDate DESC ) t<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 <i>IndexSeek<\/i> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/81a\/11a\/ca0\/81a11aca043940d4a9382db76ba8ebc2.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'SalesPersonQuotaHistory'. Scan count 19972, logical reads 39944, ... Table 'Person'. Scan count 1, logical reads 67, ...<\/code><\/pre>\n<p>  \u0412\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT p.BusinessEntityID      , t.SalesQuota FROM Person.Person p LEFT JOIN (     SELECT s.BusinessEntityID          , s.SalesQuota          , RowNum = ROW_NUMBER() OVER (PARTITION BY s.BusinessEntityID ORDER BY s.QuotaDate DESC)     FROM Sales.SalesPersonQuotaHistory s ) t ON p.BusinessEntityID = t.BusinessEntityID     AND t.RowNum = 1<\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/585\/349\/1e9\/5853491e956c4102a44af1e6e4948684.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'Person'. Scan count 1, logical reads 67, ... Table 'SalesPersonQuotaHistory'. Scan count 1, logical reads 4, ...<\/code><\/pre>\n<p>  <\/p>\n<h5><b>22. CASE WHEN<\/b><\/h5>\n<p>  \u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u044f\u0437\u044b\u043a\u0430? \u041e\u043d\u0430 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>CASE WHEN<\/i>:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  SELECT BusinessEntityID      , Gender      , Gender =             CASE Gender                 WHEN 'M' THEN 'Male'                 WHEN 'F' THEN 'Female'                 ELSE 'Unknown'             END FROM HumanResources.Employee<\/code><\/pre>\n<p>  <i>SQL Server<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"sql\">SELECT BusinessEntityID      , Gender      , Gender =             CASE                 WHEN Gender = 'M' THEN 'Male'                 WHEN Gender = 'F' THEN 'Female'                 ELSE 'Unknown'             END FROM HumanResources.Employee<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 <i>TRUE<\/i> \u043b\u0438\u0431\u043e \u0431\u044b \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u043c \u0434\u043e \u0431\u043b\u043e\u043a\u0430 <i>ELSE<\/i>.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430\u0436\u0443, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('dbo.GetMailUrl') IS NOT NULL     DROP FUNCTION dbo.GetMailUrl GO  CREATE FUNCTION dbo.GetMailUrl (     @Email NVARCHAR(50) ) RETURNS NVARCHAR(50) AS BEGIN      RETURN SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email))  END<\/code><\/pre>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c <i>SQL Profiler<\/i> \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 <i>SQL:StmtStarting \/ SP:StmtCompleted <\/i> (\u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <i>XEvents<\/i>: <i>sp_statement_starting \/ sp_statement_completed<\/i>).<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT TOP(10) EmailAddressID              , EmailAddress              , CASE dbo.GetMailUrl(EmailAddress)                    --WHEN 'microsoft.com' THEN 'Microsoft'                    WHEN 'adventure-works.com' THEN 'AdventureWorks'                END FROM Person.EmailAddress<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f 10 \u0440\u0430\u0437. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0431\u0435\u0440\u0435\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"sql\">SELECT TOP(10) EmailAddressID              , EmailAddress              , CASE dbo.GetMailUrl(EmailAddress)                    WHEN 'microsoft.com' THEN 'Microsoft'                    WHEN 'adventure-works.com' THEN 'AdventureWorks'                END FROM Person.EmailAddress<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0443\u0436\u0435 20 \u0440\u0430\u0437. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 <i>CASE<\/i> \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442. \u0417\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <i>CASE<\/i> \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u2014 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u0411\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"sql\">SELECT EmailAddressID      , EmailAddress      , CASE MailUrl            WHEN 'microsoft.com' THEN 'Microsoft'            WHEN 'adventure-works.com' THEN 'AdventureWorks'        END FROM (     SELECT TOP(10) EmailAddressID                  , EmailAddress                  , MailUrl = dbo.GetMailUrl(EmailAddress)     FROM Person.EmailAddress ) t<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f 10 \u0440\u0430\u0437.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c <i>CASE<\/i> \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u0430\u043c\u0438:<\/p>\n<pre><code class=\"sql\">SELECT DISTINCT     CASE         WHEN Gender = 'M' THEN 'Male'         WHEN Gender = 'M' THEN '...'         WHEN Gender = 'M' THEN '......'         WHEN Gender = 'F' THEN 'Female'         WHEN Gender = 'F' THEN '...'         ELSE 'Unknown'     END FROM HumanResources.Employee<\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 <i>CASE<\/i> \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438). \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f <i>SQL Server<\/i> \u0441 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<pre><code class=\"sql\">DECLARE @i INT = 1 SELECT     CASE WHEN @i = 1         THEN 1         ELSE 1\/0     END GO  DECLARE @i INT = 1 SELECT     CASE WHEN @i = 1         THEN 1         ELSE MIN(1\/0)     END<\/code><\/pre>\n<p>  <\/p>\n<h5><b>23. Scalar func<\/b><\/h5>\n<p>  \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u041e\u041e\u041f \u2014 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043d\u0430 <i>T-SQL<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0441\u0442\u0440\u0430\u0434\u0430\u043b, \u043a\u043e\u0433\u0434\u0430 \u0435\u0449\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b \u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0443\u0441\u0430\u0445 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<pre><code class=\"sql\">USE AdventureWorks2014 GO  UPDATE TOP(1) Person.[Address] SET AddressLine2 = AddressLine1 GO  IF OBJECT_ID('dbo.isEqual') IS NOT NULL     DROP FUNCTION dbo.isEqual GO  CREATE FUNCTION dbo.isEqual (     @val1 NVARCHAR(100),     @val2 NVARCHAR(100) ) RETURNS BIT AS BEGIN     RETURN         CASE WHEN (@val1 IS NULL AND @val2 IS NULL) OR @val1 = @val2             THEN 1             ELSE 0         END END<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"sql\">SET STATISTICS TIME ON  SELECT AddressID, AddressLine1, AddressLine2 FROM Person.[Address] WHERE dbo.IsEqual(AddressLine1, AddressLine2) = 1  SELECT AddressID, AddressLine1, AddressLine2 FROM Person.[Address] WHERE (AddressLine1 IS NULL AND AddressLine2 IS NULL)     OR AddressLine1 = AddressLine2  SELECT AddressID, AddressLine1, AddressLine2 FROM Person.[Address] WHERE AddressLine1 = ISNULL(AddressLine2, '')  SET STATISTICS TIME OFF<\/code><\/pre>\n<p>  \u041d\u043e \u0437\u0430 \u0441\u0447\u0435\u0442, \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443:<\/p>\n<pre><code class=\"1c\">SQL Server Execution Times:    CPU time = 63 ms,  elapsed time = 57 ms.  SQL Server Execution Times:    CPU time = 0 ms,  elapsed time = 1 ms.  SQL Server Execution Times:    CPU time = 0 ms,  elapsed time = 1 ms.<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 <i>SQL Server<\/i> \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0437\u043b\u043e? \u041d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 <i>SCHEMABINDING<\/i> \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('dbo.GetPI') IS NOT NULL     DROP FUNCTION dbo.GetPI GO  CREATE FUNCTION dbo.GetPI () RETURNS FLOAT WITH SCHEMABINDING AS BEGIN     RETURN PI() END GO  SELECT dbo.GetPI() FROM Sales.Currency<\/code><\/pre>\n<p>  \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u043e\u0432\u043d\u043e 1 \u0440\u0430\u0437.<\/p>\n<h5><b>24. VIEWs<\/b><\/h5>\n<p>  \u041a\u0442\u043e-\u0442\u043e \u043b\u044e\u0431\u0438\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u2026 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435\u0442. \u041d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044c\u044e \u2013 \u0441\u0435\u0431\u0435 \u0434\u043e\u0440\u043e\u0436\u0435, \u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0432\u044c\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0435:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('dbo.tbl', 'U') IS NOT NULL     DROP TABLE dbo.tbl GO  CREATE TABLE dbo.tbl (a INT, b INT) GO INSERT INTO dbo.tbl VALUES (0, 1) GO  IF OBJECT_ID('dbo.vw_tbl', 'V') IS NOT NULL     DROP VIEW dbo.vw_tbl GO  CREATE VIEW dbo.vw_tbl AS     SELECT * FROM dbo.tbl GO  SELECT * FROM dbo.vw_tbl<\/code><\/pre>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"1c\">a           b ----------- ----------- 0           1<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u043f\u044f\u0442\u044c \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0432\u044c\u044e:<\/p>\n<pre><code class=\"sql\">ALTER TABLE dbo.tbl     ADD c INT NOT NULL DEFAULT 2 GO  SELECT * FROM dbo.vw_tbl<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"1c\">a           b ----------- ----------- 0           1<\/code><\/pre>\n<p>  \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043b\u0438\u0431\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<pre><code class=\"sql\">EXEC sys.sp_refreshview @viewname = N'dbo.vw_tbl' GO  SELECT * FROM dbo.vw_tbl<\/code><\/pre>\n<p>  \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"1c\">a           b           c ----------- ----------- ----------- 0           1           2<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043f\u0440\u044f\u043c\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0432\u044c\u044e. \u0417\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u00ab\u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u00bb \u0438\u0437 <i>AdventureWorks<\/i>:<\/p>\n<pre><code class=\"sql\">ALTER VIEW HumanResources.vEmployee AS     SELECT e.BusinessEntityID          , p.Title          , p.FirstName          , p.MiddleName          , p.LastName          , p.Suffix          , e.JobTitle          , pp.PhoneNumber          , pnt.[Name] AS PhoneNumberType          , ea.EmailAddress          , p.EmailPromotion          , a.AddressLine1          , a.AddressLine2          , a.City          , sp.[Name] AS StateProvinceName          , a.PostalCode          , cr.[Name] AS CountryRegionName          , p.AdditionalContactInfo     FROM HumanResources.Employee e     JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID     JOIN Person.BusinessEntityAddress bea ON bea.BusinessEntityID = e.BusinessEntityID     JOIN Person.[Address] a ON a.AddressID = bea.AddressID     JOIN Person.StateProvince sp ON sp.StateProvinceID = a.StateProvinceID     JOIN Person.CountryRegion cr ON cr.CountryRegionCode = sp.CountryRegionCode     LEFT JOIN Person.PersonPhone pp ON pp.BusinessEntityID = p.BusinessEntityID     LEFT JOIN Person.PhoneNumberType pnt ON pp.PhoneNumberTypeID = pnt.PhoneNumberTypeID     LEFT JOIN Person.EmailAddress ea ON p.BusinessEntityID = ea.BusinessEntityID<\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u2026 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0435 \u0447\u0430\u0441\u0442\u044c? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043c\u044f \u0438 \u0444\u0430\u043c\u0438\u043b\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"sql\">SELECT BusinessEntityID      , FirstName      , LastName FROM HumanResources.vEmployee  SELECT p.BusinessEntityID      , p.FirstName      , p.LastName FROM Person.Person p WHERE p.BusinessEntityID IN (         SELECT e.BusinessEntityID         FROM HumanResources.Employee e     )<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043b\u0430\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044c\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/997\/40b\/7e9\/99740b7e99e946d6bfa35e404c1c7537.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'EmailAddress'. Scan count 290, logical reads 640, ... Table 'PersonPhone'. Scan count 290, logical reads 636, ... Table 'BusinessEntityAddress'. Scan count 290, logical reads 636, ... Table 'Person'. Scan count 0, logical reads 897, ... Table 'Employee'. Scan count 1, logical reads 2, ...<\/code><\/pre>\n<p>  \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/87e\/649\/067\/87e6490676b142c69f2ff3134170c9f4.png\"\/><\/p>\n<pre><code class=\"1c\">Table 'Person'. Scan count 0, logical reads 897, ... Table 'Employee'. Scan count 1, logical reads 2, ...<\/code><\/pre>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 <i>SQL Server<\/i> \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u043c\u043d\u044b\u043c \u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u0418\u043d\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u043c\u0435\u0448\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u00ab\u0430 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0438\u00bb. \u0418\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e\u2026 \u043d\u0443 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u0436\u0435 \u043d\u0435 \u043f\u043e\u0432\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439.<\/p>\n<h5><b>25. CURSORs<\/b><\/h5>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 <i>SQL Server<\/i> \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u0441\u0442\u0438\u043d\u0443 \u2014 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u043d\u0435 <i>Oracle<\/i>!<\/p>\n<p>  \u0427\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"sql\">DECLARE @BusinessEntityID INT  DECLARE cur CURSOR FOR     SELECT BusinessEntityID     FROM HumanResources.Employee  OPEN cur  FETCH NEXT FROM cur INTO @BusinessEntityID  WHILE @@FETCH_STATUS = 0 BEGIN      UPDATE HumanResources.Employee     SET VacationHours = 0     WHERE BusinessEntityID = @BusinessEntityID      FETCH NEXT FROM cur INTO @BusinessEntityID  END  CLOSE cur DEALLOCATE cur<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"sql\">UPDATE HumanResources.Employee SET VacationHours = 0 WHERE VacationHours &lt;&gt; 0<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0447\u0438\u0441\u043b\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043d\u043e \u043f\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c. \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438. \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u0441\u043a\u0440\u0438\u043f\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0440\u0430. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0430 \u0432\u0441\u0435\u0433\u043e \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 38 \u0441\u0435\u043a\u0443\u043d\u0434. \u0412\u044b\u0431\u0440\u043e\u0441\u0438\u043b \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0443\u0440\u0441\u043e\u0440 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0442\u0430\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f 600\u043c\u0441. \u0412\u044b\u043a\u0438\u043d\u0443\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u0443\u0440\u0441\u043e\u0440 \u2014 200\u043c\u0441.<\/p>\n<p>  \u041a\u0443\u0440\u0441\u043e\u0440\u044b \u043d\u0430 <i>SQL Server<\/i> \u2014 \u0437\u043b\u043e!<\/p>\n<h5><b>26. STRING_CONCAT<\/b><\/h5>\n<p>  \u0412\u0441\u0435 \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435 \u2014 \u044d\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0435\u0440\u0445 \u0442\u043e\u0433\u043e \u0438\u0434\u0438\u043e\u0442\u0438\u0437\u043c\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u043e\u0434\u043d\u0443?<\/p>\n<p>  \u042f \u0431\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0433 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i>STRING_CONCAT<\/i>, \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430\u2026 \u041d\u0430 \u0434\u0432\u043e\u0440\u0435 2016 \u0433\u043e\u0434, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a, \u0432 SQL Server \u0442\u0430\u043a \u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438. \u041d\u0443\u0436\u043d\u043e \u0436\u0435 \u043a\u0430\u043a-\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"sql\">IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL     DROP TABLE #t GO  CREATE TABLE #t (i CHAR(1)) INSERT INTO #t VALUES ('1'), ('2'), ('3')<\/code><\/pre>\n<p>  \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043c\u043e\u0435\u0433\u043e \u00ab\u043b\u044e\u0431\u0438\u043c\u0446\u0430\u00bb \u2014 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<pre><code class=\"sql\">DECLARE @txt VARCHAR(50) = '' SELECT @txt += i FROM #t  SELECT @txt<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">-------- 123<\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0441\u0430\u043c <i>MS<\/i> \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430:<\/p>\n<pre><code class=\"sql\">DECLARE @txt VARCHAR(50) = '' SELECT @txt += i FROM #t ORDER BY LEN(i)  SELECT @txt<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">-------- 3<\/code><\/pre>\n<p>  \u0421\u043a\u0430\u0436\u0443 \u0447\u0435\u0441\u0442\u043d\u043e, \u0441\u0430\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0434\u043e\u043b\u0433\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u0443 \u043c\u0435\u043d\u044f \u043e\u0442\u0447\u0435\u0442 \u043f\u043e \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u0430 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0435\u0449\u0435 \u0447\u0435\u0433\u043e: <i>CLR<\/i>, <i>UPDATE<\/i>, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f, \u0446\u0438\u043a\u043b\u044b\u2026 \u0438 \u044d\u0442\u043e \u0432\u0441\u0435 \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0432 90% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c XML:<\/p>\n<pre><code class=\"sql\">SELECT [text()] = i FROM #t FOR XML PATH('')<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">-------- 123<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u0442\u0443\u0442 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0436\u0438\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430 \u043d\u044e\u0430\u043d\u0441\u043e\u0432. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043d\u0435 \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e:<\/p>\n<pre><code class=\"sql\">SELECT [name], STUFF((     SELECT ', ' + c.[name]     FROM sys.columns c     WHERE c.[object_id] = t.[object_id]     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') FROM sys.objects t WHERE t.[type] = 'U'<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"1c\">------------------------ ------------------------------------ ScrapReason              ScrapReasonID, Name, ModifiedDate Shift                    ShiftID, Name, StartTime, EndTime<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f XML \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8b6\/68c\/0ce\/8b668c0ceabe40a291504adda4ef584e.png\"\/><\/p>\n<p>  \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c:<\/p>\n<pre><code class=\"sql\">SELECT [name], STUFF((     SELECT ', ' + c.[name]     FROM sys.columns c     WHERE c.[object_id] = t.[object_id]     FOR XML PATH(''), TYPE).value('(.\/text())[1]', 'NVARCHAR(MAX)'), 1, 2, '') FROM sys.objects t WHERE t.[type] = 'U'<\/code><\/pre>\n<p>  \u041d\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <i>value<\/i>:<\/p>\n<pre><code class=\"sql\">SELECT t.name      , STUFF((             SELECT ', ' + c.name             FROM sys.columns c             WHERE c.[object_id] = t.[object_id]             FOR XML PATH('')), 1, 2, '') FROM sys.objects t WHERE t.[type] = 'U'<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ead\/a22\/71e\/eada2271eb044fdd873dde61982538d6.png\"\/><\/p>\n<p>  \u0418 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0434\u043d\u043e \u00ab\u043d\u043e\u00bb. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT t.name      , STUFF((             SELECT ', ' + CHAR(13) + c.name             FROM sys.columns c             WHERE c.[object_id] = t.[object_id]             FOR XML PATH('')), 1, 2, '') FROM sys.objects t WHERE t.[type] = 'U'<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0432\u0440\u043e\u0434\u0435 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u0435\u0441\u043b\u0438 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0435\u0442, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u0435\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 <i>value<\/i>, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0438\u0439 \u043f\u043b\u0430\u043d \u0441 <i>value(&#8216;(.\/text())[1]&#8217;&#8230;<\/i>.<\/p>\n<h5><b>27. SQL Injection<\/b><\/h5>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 <i>sql injection<\/i>, \u0447\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0445. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"sql\">DECLARE @param VARCHAR(MAX) SET @param = 1  DECLARE @SQL NVARCHAR(MAX) SET @SQL = 'SELECT TOP(5) name FROM sys.objects WHERE schema_id = ' + @param  PRINT @SQL EXEC (@SQL)<\/code><\/pre>\n<p>  \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT TOP(5) name FROM sys.objects WHERE schema_id = 1<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 \u0447\u0442\u043e-\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435:<\/p>\n<pre><code class=\"sql\">SET @param = '1; select ''hack'''<\/code><\/pre>\n<p>  \u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"sql\">SELECT TOP(5) name FROM sys.objects WHERE schema_id = 1; select 'hack'<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0430\u0442\u0430\u043a\u0430, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u043a <i>sql injection<\/i>, \u043a\u043e\u0433\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u00ab\u043b\u0438\u0448\u043d\u0435\u0435\u00bb. \u0422\u0443\u0442 \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0437\u0435\u0442 \u2014 \u043b\u0438\u0448\u044c \u0431\u044b \u043f\u0440\u0430\u0432 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \ud83d\ude42<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <i>String.Format<\/i> (\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e), \u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 <i>sql injection<\/i>:<\/p>\n<pre><code class=\"cs\">using (SqlConnection conn = new SqlConnection()) {     conn.ConnectionString = @&quot;Server=.;Database=AdventureWorks2014;Trusted_Connection=true&quot;;     conn.Open();      SqlCommand command = new SqlCommand(         string.Format(&quot;SELECT TOP(5) name FROM sys.objects WHERE schema_id = {0}&quot;, value), conn);      using (SqlDataReader reader = command.ExecuteReader())     {         while (reader.Read()) {}     } }<\/code><\/pre>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>sp_executesql<\/i> \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"sql\">DECLARE @param VARCHAR(MAX) SET @param = '1; select ''hack'''  DECLARE @SQL NVARCHAR(MAX) SET @SQL = 'SELECT TOP(5) name FROM sys.objects WHERE schema_id = @schema_id'  PRINT @SQL EXEC sys.sp_executesql @SQL                      , N'@schema_id INT'                      , @schema_id = @param<\/code><\/pre>\n<p>  \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 \u0447\u0442\u043e-\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442.<\/p>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">using (SqlConnection conn = new SqlConnection()) {     conn.ConnectionString = @&quot;Server=.;Database=AdventureWorks2014;Trusted_Connection=true&quot;;     conn.Open();      SqlCommand command = new SqlCommand(         &quot;SELECT TOP(5) name FROM sys.objects WHERE schema_id = @schema_id&quot;, conn);     command.Parameters.Add(new SqlParameter(&quot;schema_id&quot;, value));      ... }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443, \u0438\u043d\u0430\u0447\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0440\u0438\u0441\u043a\u0443\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043d\u0435\u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u2026<\/p>\n<h5><b>\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u043e 38 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435<\/b><\/h5>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u044b\u0440\u043e\u043a \u043c\u043e\u0446\u0430\u0440\u0435\u043b\u043b\u0430 \u0438 \u0441\u043c\u0443\u0437\u0438 \u043f\u043e\u0441\u043b\u0435 8-\u0447\u0430\u0441\u043e\u0432\u043e\u0433\u043e \u0434\u043d\u044f. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 <i>T-SQL<\/i>. \u0422\u0443\u0442 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0433\u0440\u0430\u0431\u043b\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u043b. <\/p>\n<p>  \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439\u00bb \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 <i>SQL Server<\/i>, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u0441\u0438\u043b \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0443\u043c\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0430, \u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435.<\/p>\n<h5><b>\u0412\u0438\u0434\u0435\u043e<\/b><\/h5>\n<p>  \u0427\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u00ab\u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c\u00bb \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 <a href=\"https:\/\/www.youtube.com\/user\/russianvc\"><i>russianVC<\/i><\/a>: <a href=\"https:\/\/www.youtube.com\/watch?v=C1I5v1xxJv4\"><i>\u0412\u0440\u0435\u0434\u043d\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432<\/i><\/a>. \u0412\u0438\u0434\u0435\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u0441\u0442\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u043d\u0435 \u0441\u043e\u0441\u0442\u043e\u044e \u0432 \u0448\u0442\u0430\u0442\u0435 \u0444\u0438\u0440\u043c\u044b \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043d\u0430 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<h5><b>\u0427\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0431\u043e\u0440\u0442\u043e\u043c?<\/b><\/h5>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0448\u0438\u043b \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432 \u044f\u043d\u0432\u0430\u0440\u0435.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u043e\u0442\u0435\u043b \u0431\u0435\u0433\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e <i>parameter sniffing<\/i>, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u043e\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u044f \u041f\u0438\u043b\u044e\u0433\u0438\u043d\u0430: <a href=\"http:\/\/www.somewheresomehow.ru\/fast-in-ssms-slow-in-app-part1\/\"><i>\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0431\u044b\u0441\u0442\u0440\u043e \u0432 SSMS<\/i><\/a>.<\/p>\n<h5><b>\u0411\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f?<\/b><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445 \u043f\u043e <i>SQL Server<\/i>. \u0412 <b>26 \u043d\u043e\u044f\u0431\u0440\u044f \u0432 \u0414\u043d\u0435\u043f\u0440\u0435<\/b> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c <a href=\"http:\/\/www.sqlsaturday.com\/577\/EventHome.aspx\"><i>SQL Saturday 2016 Dnepr<\/i><\/a> \u2014 \u043e\u0434\u043d\u043e\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0440\u0435\u043d\u0438\u043d\u0433 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0442\u0435\u0445 \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u043f\u043e <i>SQL Server<\/i>. \u0411\u0443\u0434\u0435\u0442 \u043a\u0443\u0447\u0430 \u0441\u043f\u0438\u043a\u0435\u0440\u043e\u0432 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432. \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/www.sqlsaturday.com\/577\/Sessions\/Schedule.aspx\">\u0442\u0443\u0442<\/a>.<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/315142\/\"> https:\/\/habrahabr.ru\/post\/315142\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/175\/993\/204\/175993204615473ebce2501d20d9ad8f.png\"\/><\/p>\n<p>  \u0412\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u043e\u2026 \u0417\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0420\u0438\u0445\u0442\u0435\u0440\u043e\u043c \u0438 \u0443\u0441\u0438\u043b\u0435\u043d\u043d\u043e \u0448\u0442\u0443\u0434\u0438\u0440\u043e\u0432\u0430\u043b \u0428\u0438\u043b\u0434\u0442\u0430. \u0414\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 <i>.NET<\/i>, \u043d\u043e \u0441\u0443\u0434\u044c\u0431\u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0441\u044f\u0446\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u043d\u0430\u0447\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0432\u043e \u0432\u043d\u043e\u0432\u044c \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0434\u044b\u0440\u0443 \u0434\u043e\u043a\u0438\u043d\u0443\u043b\u0438 \u0441\u0432\u0435\u0436\u0435\u0433\u043e \u043b\u044e\u0434\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u043c\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 <i>SQL Server<\/i>. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0448\u043b\u043e \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 6 \u043b\u0435\u0442 \u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u0435\u2026  <\/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-280949","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280949","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=280949"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/280949\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=280949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=280949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}