<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Гайдар Магдануров : SQL</title><link>http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx</link><description>Tags: SQL</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Решение проблемы с SQL Server Compact на x64-битных системах</title><link>http://blogs.msdn.com/gaidar/archive/2009/04/30/9580053.aspx</link><pubDate>Thu, 30 Apr 2009 15:57:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9580053</guid><dc:creator>gaidar</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/9580053.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=9580053</wfw:commentRss><description>&lt;p&gt;В последнее время часто встречалась проблема с развертыванием приложений, использующих SQL Server Compact на серверах&amp;#160; под управлением 64-битных ОС. &lt;a href="http://erikej.blogspot.com/2008/01/x64-and-sql-compact.html"&gt;Проблема и решение описаны в блоге Эрика&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9580053" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/Evangelism/default.aspx">Evangelism</category></item><item><title>Уменьшение размера log файла в SQL Server 2008</title><link>http://blogs.msdn.com/gaidar/archive/2009/04/10/9542641.aspx</link><pubDate>Fri, 10 Apr 2009 22:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9542641</guid><dc:creator>gaidar</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/9542641.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=9542641</wfw:commentRss><description>&lt;p&gt;Некоторые базы с которыми я работаю имеют очень интересную жизненную историю и тяжелое детство в связи с чем можно наблюдать такую картинку, что размер mdf файла, чуть больше 500 Мб, а вот log файл сильно за 4 Гб. Поскольку таких баз у меня много, а места на диске, увы, уже мало.&lt;/p&gt;  &lt;p&gt;Для SQL Server до 2008 версии я пользовался следующей процедурой:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;USE &lt;em&gt;ИмяБазы&lt;/em&gt;       &lt;br /&gt;BACKUP LOG &lt;em&gt;ИмяБазы&lt;/em&gt; WITH TRUNCATE_ONLY       &lt;br /&gt;DBCC SHRINKFILE( &lt;em&gt;ИмяФайлаЛога&lt;/em&gt;,&amp;#160; &lt;em&gt;ЖелаемыйРазмер&lt;/em&gt; )&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;С SQL Server 2008 этот метод не работает, поэтому следует использоват другую процедуру:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;USE &lt;em&gt;ИмяБазы&lt;/em&gt;       &lt;br /&gt;ALTER DATABASE &lt;em&gt;ИмяБазы &lt;/em&gt;SET RECOVERY SIMPLE       &lt;br /&gt;DBCC SHRINKFILE (&lt;em&gt;ИмяФайлаЛога&lt;/em&gt;, &lt;em&gt;ЖелаемыйРазмер&lt;/em&gt;);       &lt;br /&gt;ALTER DATABASE &lt;em&gt;ИмяБазы&lt;/em&gt; SET RECOVERY FULL&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Думаю теперь, что делать с освободившимися несколькими десятками Гб :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9542641" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/Evangelism/default.aspx">Evangelism</category></item><item><title>Ошибка сохрнения изменений, требующих пересоздания таблицы в БД – SQL Server 2008 Management Studio</title><link>http://blogs.msdn.com/gaidar/archive/2009/02/27/9447667.aspx</link><pubDate>Fri, 27 Feb 2009 02:45:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9447667</guid><dc:creator>gaidar</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/9447667.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=9447667</wfw:commentRss><description>&lt;p&gt;Те, кто начинают пользоваться SQL Server Management Studio из поставки SQL Server 2008 сталкиваются с интересной ошибкой, которая возникает при попытке обновить таблицу в базе данных (добавив или удалив колонки, изменив названия и тип колонок и т.п.):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gaidar/WindowsLiveWriter/SQLServer2008ManagementStudio_2658/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gaidar/WindowsLiveWriter/SQLServer2008ManagementStudio_2658/image_thumb.png" width="501" height="74" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Эта ошибка связана с настройкой “Prevent saving changes that require table re-creation” SQL Management Studio, включенной по умолчанию, которую можно отключить в меню Tools –&amp;gt; Options, дальше нода Designers –&amp;gt; Table and Database Designers.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gaidar/WindowsLiveWriter/SQLServer2008ManagementStudio_2658/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gaidar/WindowsLiveWriter/SQLServer2008ManagementStudio_2658/image_thumb_1.png" width="550" height="317" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Достаточно снять галку и “вуаля”.&lt;/p&gt;  &lt;p&gt;Для чего это сделано по умолчанию, спросите вы, дорогой читатель. Это сделано для случаев работы с базой данных работающего приложения, для которого пересоздание таблицы может быть фатальным.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9447667" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Вышел Microsoft Web Platform Installer Release Candidate</title><link>http://blogs.msdn.com/gaidar/archive/2008/11/25/9139438.aspx</link><pubDate>Tue, 25 Nov 2008 02:13:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9139438</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/9139438.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=9139438</wfw:commentRss><description>&lt;p&gt;Web Platform Installer (WPI) - это инструмент для быстрой установки необхоимых для разработки или развертывания веб-приложений компонентов (&lt;a href="http://lear.iis.net"&gt;IIS&lt;/a&gt;, &lt;a href="www.asp.net"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://www.microsoft.com/express/"&gt;Visual Web Developer Express&lt;/a&gt;, &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;SQL Server&lt;/a&gt;,&amp;#160; расширения IIS вроде &lt;a href="http://www.iis.net/extensions/URLRewrite"&gt;URL rewrite&lt;/a&gt; и &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt;). Работает для Windows XP, Windows Server 2003, Windows Vista и Windows Server 2008.&lt;/p&gt;  &lt;p&gt;Страница WPI: &lt;a title="http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx" href="http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx"&gt;http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9139438" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/Evangelism/default.aspx">Evangelism</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Удаление дубликатов и обновление таблиц с использованием JOIN</title><link>http://blogs.msdn.com/gaidar/archive/2008/04/30/8445034.aspx</link><pubDate>Thu, 01 May 2008 00:34:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8445034</guid><dc:creator>gaidar</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/8445034.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=8445034</wfw:commentRss><description>&lt;p&gt;Я давно хотел придумать "живой" пример для удаления дубликатов и обновления таблиц с использованием JOIN, и он пришел ко мне сам собой. Только что пришлось написать небольшой скрипт T-SQL, на примере которого и продемонстрирую несколько советов.&lt;/p&gt; &lt;p&gt;Задачка: есть некоторая табличка &lt;em&gt;Table1&lt;/em&gt;, содержащая записи колонки ID1 int, ID2 int, Date datetime. В этой таблице существуют повторяющиеся пары ID1 и ID2, а дубликатов по этим парам быть не должно. Необходимо сделать несколько действий: 1) Посчитать количество дубликатов 2) Оставить только записи с самой поздней датой 3) Посчитать записи сгрупированные по ID2 и обновить поле в таблице &lt;em&gt;Table2&lt;/em&gt;. Сама по себе логика проста - в одной таблице собираются голоса от разных пользователей, привязанные к некоторым сущностям в &lt;em&gt;Table2&lt;/em&gt;, в самой Table2 важны два поля ID2 int и Total int, первое - идентификатор сущности, второе число строк сгруппированых по ID2 в &lt;em&gt;Table1&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Для начала посчитаем сколько у нас дубликатов:&lt;/p&gt; &lt;p&gt;SELECT ID1, ID2, count(*) FROM Table1 GROUP BY ID1, ID2 HAVING count(*) &amp;gt; 1 &lt;p&gt;Потом сделаем выборку во временную таблицу уникальных существующих ID1 и ID2, после чего привяжем к ним последнюю дату голосования и обновим основную таблицу: &lt;p&gt;DECLARE @UniqueTable TABLE(id1 int, id2 int, date datetime)  &lt;p&gt;INSERT INTO @UniqueTable&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT id1, id2, MAX(date) FROM table1 GROUP BY id1, id2 &lt;p&gt;TRUNCATE TABLE table1 &lt;p&gt;INSERT INTO table1 (id1, id2, date)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT id1, id2, date FROM @UniqueTable &lt;p&gt;Теперь, когда у нас есть нужный набор данных, обновим поля таблицы Table2, используя выражения UPDATE и JOIN: &lt;p&gt;DECLARE @TempTable TABLE(id2 int, total int)  &lt;p&gt;INSERT INTO @TempTable (id2, total) SELECT id2, Count(*) AS total FROM table1 GROUP BY id2 &lt;p&gt;UPDATE table2 SET table2.total = [@TempTable].total&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM table2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN @TempTable ON [@TempTable].id2 = table2.id2 &lt;p&gt;Вот так можно решить задачу без использования курсоров. К сожалению, мало кто использует эту возможность - очень часто вижу, что при необходимости обновления коллекции, которая связана по уникальному ключу, используют курсоры, хотя без них можно прекрасно обойтись. &lt;p&gt;Советы по оптимизации как всегда будут приняты с благодарностью! &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8445034" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.msdn.com/gaidar/archive/tags/Evangelism/default.aspx">Evangelism</category></item><item><title>Выборка случайных записей</title><link>http://blogs.msdn.com/gaidar/archive/2008/04/25/8424040.aspx</link><pubDate>Fri, 25 Apr 2008 16:15:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8424040</guid><dc:creator>gaidar</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/8424040.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=8424040</wfw:commentRss><description>&lt;p&gt;Достаточно распространенная задача с выборкой заданного количества случайных записей во всех СУБД делается примерно одинаково, но синтаксис немного отличается. Вот, собрал для заметки способы получения 10 случайных записей в самых популярных БД.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SQL Server&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;SELECT TOP 10 &lt;em&gt;Title, Text&lt;/em&gt; FROM &lt;em&gt;BlogPosts&lt;/em&gt; ORDER BY NEWID()&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Oracle&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;SELECT T&lt;em&gt;itle, Text &lt;/em&gt;FROM&amp;nbsp; (SELECT T&lt;em&gt;itle, Text&lt;/em&gt; FROM &lt;em&gt;BlogPosts&lt;/em&gt; ORDER BY dbms_random.value) WHERE rownum &amp;lt;= 10 &lt;p&gt;&lt;strong&gt;MySQL&lt;/strong&gt; &lt;p&gt;SELECT &lt;em&gt;Title, Text&lt;/em&gt; FROM &lt;em&gt;BlogPosts&lt;/em&gt; ORDER BY RAND() LIMIT 10 &lt;p&gt;&lt;strong&gt;DB2&lt;/strong&gt; &lt;p&gt;SELECT &lt;em&gt;Title, Text&lt;/em&gt;, RAND() as IDX FROM &lt;em&gt;BlogPosts&lt;/em&gt; ORDER BY IDX FETCH FIRST 10 ROWS ONLY&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8424040" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Снова удаление дубликатов</title><link>http://blogs.msdn.com/gaidar/archive/2007/10/25/5672249.aspx</link><pubDate>Thu, 25 Oct 2007 19:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5672249</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/5672249.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=5672249</wfw:commentRss><description>&lt;P&gt;Снова задали вопрос по удалению дубликатов из вот такой таблицы &lt;STRONG&gt;People&lt;/STRONG&gt;: Id int, fName nvarchar(128), sName nvarchar(128), ...&lt;/P&gt;
&lt;P&gt;Вот, что еще пришло в голову - покритикуйте, пожалуйста: DELETE FROM People WHERE ID NOT IN (SELECT MAX(ID) FROM People GROUP BY fName, sName)&lt;/P&gt;
&lt;P&gt;Для uniqueidentifier я &lt;A class="" href="http://blogs.gotdotnet.ru/personal/gaidar/PermaLink.aspx?guid=EA9C9623-C285-49CB-9FC6-8FA4B8BAA6EB" mce_href="http://blogs.gotdotnet.ru/personal/gaidar/PermaLink.aspx?guid=EA9C9623-C285-49CB-9FC6-8FA4B8BAA6EB"&gt;писал в прошлый раз&lt;/A&gt; - что-то не покритиковали :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5672249" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Выборка случайных записей из таблицы SQL Server</title><link>http://blogs.msdn.com/gaidar/archive/2007/10/08/5366216.aspx</link><pubDate>Mon, 08 Oct 2007 19:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5366216</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/5366216.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=5366216</wfw:commentRss><description>&lt;P&gt;Простейший способ отсортировать данные случайым образом:&lt;/P&gt;
&lt;P&gt;SELECT&amp;nbsp; ... FROM&amp;nbsp;... &lt;STRONG&gt;ORDER BY NEWID()&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Соответственно выборка N случайных записей:&lt;/P&gt;
&lt;P&gt;SELECT TOP&amp;nbsp;&lt;STRONG&gt;N&lt;/STRONG&gt; ...&amp;nbsp;FROM ... ORDER BY &lt;STRONG&gt;NEWID()&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5366216" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Выбор только даты из таблицы содержащей поля типа DateTime</title><link>http://blogs.msdn.com/gaidar/archive/2007/08/02/SqlOnlyDate.aspx</link><pubDate>Thu, 02 Aug 2007 20:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4191928</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/4191928.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=4191928</wfw:commentRss><description>&lt;P&gt;Допустим, что в одной таблице содержиться колонка RegistrationDate&amp;nbsp;типа datetime, содержащая время регистрации пользователя на сайте. При этом зачение по умолчанию для колонки установлено GETDATE(), а есть необходимость в отчете вывести только список дат, без точного времени регистрации. Для этого можно написать простенькую процедуру, позволяющую выбрать только уникальные даты:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;ALTER PROCEDURE &lt;/FONT&gt;&lt;FONT size=2&gt;dbo.GetDates &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;AS&lt;BR&gt;&lt;BR&gt;DECLARE &lt;/FONT&gt;&lt;FONT size=2&gt;@Temp &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE &lt;/FONT&gt;&lt;FONT size=2&gt;(RegistrationDate &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;datetime&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;INSERT INTO &lt;/FONT&gt;&lt;FONT size=2&gt;@Temp &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT &lt;/FONT&gt;&lt;FONT size=2&gt;RegistrationDate &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM &lt;/FONT&gt;&lt;FONT size=2&gt;Participants &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER BY &lt;/FONT&gt;&lt;FONT size=2&gt;RegistrationDate&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT DATEADD&lt;/FONT&gt;&lt;FONT size=2&gt;(dd, 0, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DATEDIFF&lt;/FONT&gt;&lt;FONT size=2&gt;(dd, 0, RegistrationDate)) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM &lt;/FONT&gt;&lt;FONT size=2&gt;@Temp&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4191928" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Удаление повторяющихся записей из таблицы в SQL Server</title><link>http://blogs.msdn.com/gaidar/archive/2007/07/17/3918383.aspx</link><pubDate>Tue, 17 Jul 2007 18:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3918383</guid><dc:creator>gaidar</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gaidar/comments/3918383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gaidar/commentrss.aspx?PostID=3918383</wfw:commentRss><description>&lt;P&gt;"Эти дубликаты так раздражают", сказал админ и удалил все записи в таблице.&lt;BR&gt;&lt;EM&gt;Из страшного сна администратора&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Представим себе таблицу Peope, имеющую колонки PersonId uniqueidentifier, Name nvarchar, Email nvarchar и захламленную дублирующими записями, от которых нам хотелось бы избавиться. Самый простой способ выполнить следующий запрос:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;delete&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; p &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; people p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; people t&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;email &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;email&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;and&lt;/FONT&gt;&lt;FONT size=2&gt; p&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;personid &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; t&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;personid&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Многие так и делают, забывая, что если у записи есть идентификатор, то она вполне себе может быть использована где-то еще и, удалив запись, все связи с ней могут потеряться. Собственно это сообщение я пишу встретившись с таким случаем на одном небольшом форуме. Поэтому предупреждаю - прежде чем что-то удалять, нужно подправить все возможные связи. Например выбрав перед удалением записи во временную таблицу, чтобы затем можно было пройтись по зависимым таблицам и обновить идентификаторы.&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3918383" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gaidar/archive/tags/SQL/default.aspx">SQL</category></item></channel></rss>