Полезные скрипты

Posted: Август 7, 2013 in TSQL
Метки: , ,

В SSMS есть замечательная вкладка Template Explorer. Там куча скриптов почти на все случаи жизни. Простейшие скрипты можно запускать сразу. Если в скрипте есть параметры, то заходим в меню Query и выбираем Specify Values for Template Parameters. После этого указываем параметры и нажимаем ОК. Теперь скрипт с подставленными значениями тоже можно запускать.
Но эти скрипты очень многословны. Например скрипт добавления колонки занимает двадцать три строки! Из них шесть отводится только на комментарии, одиннадцать на создание таблицы %), три на собственно добавление самой колонки. Плюс несколько пустых строк. Конечно, эти скрипты скорее всего призваны быть как бы полуфабрикатами. Если что-то не нравится, то можно тут же изменить, никто нам этого не запрещает.
В процессе работы появились несколько скриптов, которые не столь тривиальны как добавление столбца. Эти скрипты используются довольно часто в наших проектах и просты в понимании:

1. Detach и Attach базы данных выглядит так


ALTER DATABASE Northwind SET OFFLINE WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE Northwind SET ONLINE
go

2. Бекап и восстановление


BACKUP DATABASE Northwind TO DISK = N'C:\backups\Northwind.bak' WITH NOFORMAT, INIT, NAME = N'Northwind-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
alter database Northwind2 set single_user with rollback immediate
go
RESTORE DATABASE Northwind2 FROM DISK = N'C:\backups\Northwind.bak' WITH FILE = 1, NOUNLOAD, STATS = 10
go
alter database Northwind2 set multi_user
go

3. Шринк


dbcc shrinkdatabase ('Northwind')

4. Чтение из Excel файла


if object_id('dbo.SomeTable','u') is not null 
  drop table dbo.SomeTable
select 
  *
into 
 SomeTable
FROM 
 OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=c:\xls\Northwind.xlsx;Extended Properties=Excel 8.0')...Products$ s

5. Выборка из DBF. БД DBF должна быть предварительно прилинкована


select 
    *
FROM 
  DBF...Products

6. Курсор


use Northwind
go

declare @CategoryID int

DECLARE MY_CURSOR Cursor  
FOR
select 
 CategoryID
from 
 dbo.Products (nolock) 

open MY_CURSOR 

Fetch NEXT FROM MY_CURSOR INTO 
	@CategoryID 
WHILE @@FETCH_STATUS = 0
BEGIN

  begin try
    ...
      
    if /*условие*/
    begin
      declare @error nvarchar (max) = '...'
      raiserror(@error, 16, 1) -- уровень 16 значит сразу в catch переходит
    end

  end	try
  begin catch			
    print '************Ошибка! ' + ERROR_MESSAGE() ;
  end catch	 
  
  FETCH NEXT FROM MY_CURSOR INTO 
		  @CategoryID 
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s