<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kocherov.net &#187; mssql</title>
	<atom:link href="https://kocherov.net/tag/mssql/feed/" rel="self" type="application/rss+xml" />
	<link>https://kocherov.net</link>
	<description>создание и поддержка парсеров, систем сбора и анализа информации</description>
	<lastBuildDate>Thu, 19 Feb 2026 13:03:25 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6.1</generator>
		<item>
		<title>MSSQL, TSQL, динамический SQL, динамическое формирование запросов</title>
		<link>https://kocherov.net/mssql-tsql-dinamicheskiy-sql-dinamicheskoe-formirovanie-zaprosov/</link>
		<comments>https://kocherov.net/mssql-tsql-dinamicheskiy-sql-dinamicheskoe-formirovanie-zaprosov/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 11:18:24 +0000</pubDate>
		<dc:creator>Pavel Kocherov</dc:creator>
				<category><![CDATA[Работа]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tsql]]></category>

		<guid isPermaLink="false">http://kocherov.net/?p=203</guid>
		<description><![CDATA[Задача: в stored procedure динамически формировать SQL для получения данных. Динамическими должны быть все части: названия таблиц, количество условий, названия колонок. В идеале нужно просто составлять строку, а потом выполнять запрос из нее, при этом вообще хорошо, если удастся обеспечить параметризацию. Решение: использование sp_executesql Сразу на примере, ситуация. Пусть у нас есть несколько сущностей в [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Задача: в stored procedure динамически формировать SQL для получения данных. Динамическими должны быть все части: названия таблиц, количество условий, названия колонок. В идеале нужно просто составлять строку, а потом выполнять запрос из нее, при этом вообще хорошо, если удастся обеспечить параметризацию.</p>
<p>Решение: использование sp_executesql<br />
Сразу на примере, ситуация.</p>
<p>Пусть у нас есть несколько сущностей в системе. Есть пользователи, есть записи в блоге, есть статьи.<br />
Все они хранятся в трех разных таблицах account, blog_post, content_page (primary keys: account_id, blog_post_id, content_page_id).<br />
В каждой из этих таблиц есть, соответственно, поля acc_created, bp_created, cp_created. И представьте теперь, что в одной из sp нам необходимо за заданному id и типу сущности получить creation date. Можно написать 3 запроса &#8212; легко, ну а если сущностей, скажем, 50? Тогда простое решение становится уж очень некрасивым.</p>
<p>На помощь приходит динамический sql.<br />
<strong>Attention. Я знаю про перфоманс и про все остальное, я знаю что 50 отдельных запросов будут быстрее. Речь не об этом, а о ситуации, когда принято решение, что делать нужно так.</strong></p>
<pre class="brush: sql; title: ; notranslate">
set @sql =     N'select @created =  ' + @pspAbbrev + '_created from ' + @pspFull + ' where ' + @pspFull + '_ID = @id;';

set @params =  N'@id     integer, ' +
	       N'@created   datetime OUTPUT';
			   
exec sp_executesql @sql, @params, @id = @id, @created = @created OUTPUT
</pre>
<p>Прежде всего, нам необходимо определить @pspAbbrev (например, &#8216;usr&#8217;) и @pspFull(например, &#8216;user&#8217;).<br />
После чего сформировать @sql, определить input-output параметры, вызвать sp_executesql и далее пользоваться полученным значением из переменной @created.</p>
]]></content:encoded>
			<wfw:commentRss>https://kocherov.net/mssql-tsql-dinamicheskiy-sql-dinamicheskoe-formirovanie-zaprosov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Принудительное уменьшение объема файла данных SQL server</title>
		<link>https://kocherov.net/umenshenie-obema-fayla-bd-sql-server/</link>
		<comments>https://kocherov.net/umenshenie-obema-fayla-bd-sql-server/#comments</comments>
		<pubDate>Fri, 16 Nov 2012 05:01:46 +0000</pubDate>
		<dc:creator>Pavel Kocherov</dc:creator>
				<category><![CDATA[Работа]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[администрирование]]></category>

		<guid isPermaLink="false">http://kocherov.net/?p=41</guid>
		<description><![CDATA[Столкнулся с ситуацией: файл базы разросся за счет ошибки в приложении и заполнении одной из таблиц мусором. Ошибка исправлена, таблица вычищена, а файл базы не уменьшается. Это особенность mssql, при уменьшении объема данных свободное место системе не возвращается, а резервируется. Но если хочется, есть решение &#8212; использовать release unused space фичу SQL Studio. Не сработало? [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Столкнулся с ситуацией: файл базы разросся за счет ошибки в приложении и заполнении одной из таблиц мусором. Ошибка исправлена, таблица вычищена, а файл базы не уменьшается. Это особенность mssql, при уменьшении объема данных свободное место системе не возвращается, а резервируется.</p>
<p>Но если хочется, есть решение &#8212; использовать release unused space фичу SQL Studio.</p>
<p><img class="alignnone size-full wp-image-47" title="Release-Unused-Spaceactiondownloadupnameshrink01" src="https://kocherov.net/wp-content/uploads/2012/11/Release-Unused-Spaceactiondownloadupnameshrink01.gif" alt="" width="773" height="596" /></p>
<p><a href="https://kocherov.net/wp-content/uploads/2012/11/Release-Unused-Spaceactiondownloadupnameshrink03.gif"><img class="alignnone size-full wp-image-48" title="Release-Unused-Space" src="https://kocherov.net/wp-content/uploads/2012/11/Release-Unused-Spaceactiondownloadupnameshrink03.gif" alt="" width="753" height="665" /></a></p>
<p>Не сработало? Такое бывает, не уж то вы думали, что Microsoft и правда может сделать кнопочку &#171;сделать все хорошо&#187;? Нет, это не их подход. Кроме этого нужно сделать rebuild индексов.</p>
<h4>Отличие rebuild от reorganize.</h4>
<p>Как говорит <a href="http://blog.sqlauthority.com">индус</a>,</p>
<p><strong>Index Rebuild: </strong>Удаляет существующий индекс и создает его по-новой.</p>
<pre class="brush: sql; title: ; notranslate">USE AdventureWorks;
GO
ALTER INDEX ALL ON Production.Product REBUILD
GO
</pre>
<p><strong>Index Reorganize: </strong>Реорганизует индекс, уменьшая фрагментацию.</p>
<pre class="brush: sql; title: ; notranslate">USE AdventureWorks;
GO
ALTER INDEX ALL ON Production.Product REORGANIZE
GO
</pre>
<p><strong>Рекомендации:</strong> Делать rebuild следует при фрагментации индекса более 40%, reorganize &#8212; при фрагментации от 10% до 40%. Rebuild использует больше CPU и ресурсов базы. Development и Enterprise версии SQL server имеют опцию ONLINE для rebuild. Как следует из названия, эта опция делает индекс доступным в процессе переиндексации.</p>
]]></content:encoded>
			<wfw:commentRss>https://kocherov.net/umenshenie-obema-fayla-bd-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
