вторник, 16 марта 2010 г.
четверг, 18 февраля 2010 г.
SQL-ссылки (дублирующие записи)
Different strategies for removing duplicate records in SQL Server
--A more simplified and faster example
WITH CTE AS
(
SELECT ROW_NUMBER() OVER
(PARTITION BY [FirstName], [LastName], [Address]
Order BY [FirstName] DESC, [LastName] DESC, [Address] DESC )
AS RowNumber,
[FirstName], [LastName], [Address]
FROM Employee tbl )
DELETE FROM CTE Where RowNumber > 1
GO
SELECT * FROM Employee
GO
--A more simplified and faster example
WITH CTE AS
(
SELECT ROW_NUMBER() OVER
(PARTITION BY [FirstName], [LastName], [Address]
Order BY [FirstName] DESC, [LastName] DESC, [Address] DESC )
AS RowNumber,
[FirstName], [LastName], [Address]
FROM Employee tbl )
DELETE FROM CTE Where RowNumber > 1
GO
SELECT * FROM Employee
GO
понедельник, 1 февраля 2010 г.
SQL-полезное (Усечение LOG файла)
SQL SERVER – Shrinking Truncate Log File – Log Full
Sometime, it looks impossible to shrink the Truncated Log file. Following code always shrinks the Truncated Log File to minimum size possible.
USE DatabaseName
GO
DBCC SHRINKFILE(<TransactionLogName>, 1)
BACKUP LOG <DatabaseName> WITH TRUNCATE_ONLY
DBCC SHRINKFILE(<TransactionLogName>, 1)
GO
====================================================================
Another best way to truncate log file with out taking transactional backup would be,
1. Change recovery model from Full to Simple ( using Interfaces) and then change it back to Full. By doing this your log file will be truncated.
2. Run DBCC ShrinkFile ( ‘LogfileName’ , 1)
By doing this, you will definitely loose your transactional log data that was stored in log file. But this will truncate Log file with out taking any backup.
USE temp;
GO
– Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE temp
SET RECOVERY SIMPLE;
GO
– Shrink the truncated log file to 100 MB.
DBCC SHRINKFILE (temp_Log, 100);
GO
– Reset the database recovery model.
ALTER DATABASE temp
SET RECOVERY FULL;
GO
Sometime, it looks impossible to shrink the Truncated Log file. Following code always shrinks the Truncated Log File to minimum size possible.
USE DatabaseName
GO
DBCC SHRINKFILE(<TransactionLogName>, 1)
BACKUP LOG <DatabaseName> WITH TRUNCATE_ONLY
DBCC SHRINKFILE(<TransactionLogName>, 1)
GO
====================================================================
Another best way to truncate log file with out taking transactional backup would be,
1. Change recovery model from Full to Simple ( using Interfaces) and then change it back to Full. By doing this your log file will be truncated.
2. Run DBCC ShrinkFile ( ‘LogfileName’ , 1)
By doing this, you will definitely loose your transactional log data that was stored in log file. But this will truncate Log file with out taking any backup.
USE temp;
GO
– Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE temp
SET RECOVERY SIMPLE;
GO
– Shrink the truncated log file to 100 MB.
DBCC SHRINKFILE (temp_Log, 100);
GO
– Reset the database recovery model.
ALTER DATABASE temp
SET RECOVERY FULL;
GO
среда, 27 января 2010 г.
SQL-ссылки (Addon for Microsoft SQL Server Management Studio)
SSMS Tools Pack is an Add-In for Microsoft SQL Server Management Studio (Express).
It contains a few upgrades to the IDE that I thought were missing from it.
The current feature list is:
SQL Snippets
Window Connection Coloring
Query Execution History and Current Window History
Format SQL
Search Table, View or Database Data
Run one script on multiple databases
Copy execution plan bitmaps to clipboard or file
Search Results in Grid Mode or Execution Plans
Generate Insert statements from resultsets, tables or database
Regions and Debug sections
Running custom scripts from Object Explorer
CRUD stored procedure generation
New query template
General options
It is simply the best free SQL Server Management Studio Add-In on the web today!
And it's better than some non-free ones too. :)
It contains a few upgrades to the IDE that I thought were missing from it.
The current feature list is:
SQL Snippets
Window Connection Coloring
Query Execution History and Current Window History
Format SQL
Search Table, View or Database Data
Run one script on multiple databases
Copy execution plan bitmaps to clipboard or file
Search Results in Grid Mode or Execution Plans
Generate Insert statements from resultsets, tables or database
Regions and Debug sections
Running custom scripts from Object Explorer
CRUD stored procedure generation
New query template
General options
It is simply the best free SQL Server Management Studio Add-In on the web today!
And it's better than some non-free ones too. :)
понедельник, 25 января 2010 г.
ASP.NET - полезное (UpdateProgress с заливкой "нижнего" экрана)
Красивая отправка Ajax отправка формы
автор: gaidar
Собрался уходить домой в этот пятничный вечер, но наткнулся на письмо с вопросом о том, как закрыть форму, которая по Ajax отправляется на сервер, полупрозрачным Div.
Сделать это, просто: нужно на страничке создать Div, который будет “закрывать” нужный элемент и скрыть его, отображая лишь в момент отправки формы на сервер. Для простоты, рассмотрим пример – приложение на WebForms в котором используем серенький Div, чтобы закрыть всю страницу на время отправки формы.
Создадим сам Div внутри элемента UpdateProgress:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"
DynamicLayout="true">
<div id="progressDiv">
<p>
Подождите... Загружаем данные на сервер...
</p>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
Определим стили для этого элемента Div:
<style type="text/css">
#progressDiv
{
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background-color: gray;
opacity: 0.65;
filter: alpha(opacity=65);
position: absolute;
z-index: 1001;
text-align: center;
vertical-align: middle;
}
</style>
Собственно все, в момент обновления UpdatePanel будет отображаться содержимое UpdateProgress. Код самой формы с сокращениями:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Always"
RenderMode="Block">
<ContentTemplate>
…
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"
DynamicLayout="true">
<ProgressTemplate>
<div id="progressDiv">
<p>
Подождите... Загружаем данные на сервер...
</p>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
автор: gaidar
Собрался уходить домой в этот пятничный вечер, но наткнулся на письмо с вопросом о том, как закрыть форму, которая по Ajax отправляется на сервер, полупрозрачным Div.
Сделать это, просто: нужно на страничке создать Div, который будет “закрывать” нужный элемент и скрыть его, отображая лишь в момент отправки формы на сервер. Для простоты, рассмотрим пример – приложение на WebForms в котором используем серенький Div, чтобы закрыть всю страницу на время отправки формы.
Создадим сам Div внутри элемента UpdateProgress:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"
DynamicLayout="true">
<div id="progressDiv">
<p>
Подождите... Загружаем данные на сервер...
</p>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
Определим стили для этого элемента Div:
<style type="text/css">
#progressDiv
{
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background-color: gray;
opacity: 0.65;
filter: alpha(opacity=65);
position: absolute;
z-index: 1001;
text-align: center;
vertical-align: middle;
}
</style>
Собственно все, в момент обновления UpdatePanel будет отображаться содержимое UpdateProgress. Код самой формы с сокращениями:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Always"
RenderMode="Block">
<ContentTemplate>
…
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"
DynamicLayout="true">
<ProgressTemplate>
<div id="progressDiv">
<p>
Подождите... Загружаем данные на сервер...
</p>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
воскресенье, 17 января 2010 г.
среда, 16 декабря 2009 г.
SQL-полезное (Сравнение текста процедур, представлений, функций и т.д. в двух базах)
Сравнение текста процедур, представлений, функций и т.д. в двух базах
Коллеги из филиала спросили "как понять, какие процедуры изменились?"
К счастью, на том же сервере присутствует база, которую можно считать "эталоном".
В этом случае не нужно применять сторонние утилиты - достаточно одного запроса:
select
isnull(s1.name+'.'+o1.[name], s2.name+'.'+o2.[name]),
case
when o1.[object_id] isnullthen'только во второй'
when o2.[object_id] isnullthen'только в первой'
else'объект изменен'end
from Base1.sys.sql_modules m1
innerjoin Base1.sys.objects o1
on o1.[object_id] = m1.[object_id]
leftjoin Base1.sys.schemas s1
on s1.[schema_id] = o1.[schema_id]
fulljoin Base2.sys.sql_modules m2
innerjoin Base2.sys.objects o2
on o2.[object_id] = m2.[object_id]
leftjoin Base2.sys.schemas s2
on s2.[schema_id] = o2.[schema_id]
on s1.name+'.'+o1.[name] = s2.name+'.'+o2.[name]
whereisnull(m1.definition,'')<>isnull(m2.definition,'+')
Вместо Base1 и Base2 подставить требуемые базы данных, в том числе можно сравнивать определения объектов на linked серверах.
Коллеги из филиала спросили "как понять, какие процедуры изменились?"
К счастью, на том же сервере присутствует база, которую можно считать "эталоном".
В этом случае не нужно применять сторонние утилиты - достаточно одного запроса:
select
isnull(s1.name+'.'+o1.[name], s2.name+'.'+o2.[name]),
case
when o1.[object_id] isnullthen'только во второй'
when o2.[object_id] isnullthen'только в первой'
else'объект изменен'end
from Base1.sys.sql_modules m1
innerjoin Base1.sys.objects o1
on o1.[object_id] = m1.[object_id]
leftjoin Base1.sys.schemas s1
on s1.[schema_id] = o1.[schema_id]
fulljoin Base2.sys.sql_modules m2
innerjoin Base2.sys.objects o2
on o2.[object_id] = m2.[object_id]
leftjoin Base2.sys.schemas s2
on s2.[schema_id] = o2.[schema_id]
on s1.name+'.'+o1.[name] = s2.name+'.'+o2.[name]
whereisnull(m1.definition,'')<>isnull(m2.definition,'+')
Вместо Base1 и Base2 подставить требуемые базы данных, в том числе можно сравнивать определения объектов на linked серверах.
Подписаться на:
Сообщения (Atom)