stringtranslate.com

Transact-SQL

Transact-SQL ( T-SQL ) — это фирменное расширение SQL (языка структурированных запросов) , разработанное Microsoft и Sybase и используемое для взаимодействия с реляционными базами данных . T-SQL расширяет стандарт SQL, включая процедурное программирование , локальные переменные , различные вспомогательные функции для обработки строк, обработки дат, математики и т. д., а также изменения в операторах DELETE и UPDATE .

Transact-SQL является центральным элементом использования Microsoft SQL Server . Все приложения, взаимодействующие с экземпляром SQL Server, делают это путем отправки операторов Transact-SQL на сервер, независимо от пользовательского интерфейса приложения.

Хранимые процедуры в SQL Server — это исполняемые серверные процедуры. Преимущество хранимых процедур — возможность передавать параметры.

Переменные

Transact-SQL предоставляет следующие операторы для объявления и установки локальных переменных: DECLARE, SETи SELECT.

DECLARE @var1 NVARCHAR ( 30 ); SET @var1 = 'Некое имя' ; SELECT @var1 = Имя FROM Продажи . Магазин WHERE CustomerID = 100 ;              

Управление потоком

Ключевые слова для управления потоком в Transact-SQL включают BEGINи END, BREAK, CONTINUE, GOTO, IFи ELSE, RETURN, WAITFOR, и WHILE.

IFи ELSEразрешить условное выполнение. Этот пакетный оператор выведет "It is the weekend", если текущая дата является выходным днем, или "It is a weekday", если текущая дата является будним днем. (Примечание: этот код предполагает, что воскресенье настроено как первый день недели в настройках @@DATEFIRST.)

IF DATEPART ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 PRINT 'Сейчас выходные.' ; ELSE PRINT 'Сейчас будний день.' ;             

BEGINи ENDпометить блок операторов . Если в приведенном выше примере условным оператором должно управляться более одного оператора, мы можем использовать BEGINи ENDследующим образом:

IF DATEPART ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 BEGIN PRINT 'Сейчас выходные.' ; PRINT 'Отдохнем на выходных!' ; END ; ELSE BEGIN PRINT 'Сейчас будний день.' ; PRINT 'Приступим к работе в будний день!' ; END ;                 

WAITFORбудет ждать заданное количество времени или до определенного времени суток. Оператор может использоваться для задержек или для блокировки выполнения до установленного времени.

RETURNиспользуется для немедленного возврата из хранимой процедуры или функции.

BREAKзавершает охватывающий WHILEцикл, в то время как CONTINUEвызывает выполнение следующей итерации цикла. Пример цикла WHILEприведен ниже.

ОБЪЯВИТЬ @i INT ; УСТАНОВИТЬ @i = 0 ;     WHILE @i < 5 BEGIN PRINT 'Привет, мир.' ; SET @i = @i + 1 ; END ;           

Изменения в операторах DELETE и UPDATE

В Transact-SQL оба оператора DELETEи UPDATEулучшены, что позволяет использовать в операции данные из другой таблицы без необходимости в подзапросе:

В этом примере удаляются все users, кто помечен в user_flagsтаблице флагом «бездействие».

УДАЛИТЬ u ИЗ пользователей AS u INNER JOIN user_flags AS f ON u . id = f . id WHERE f . name = 'idle' ;                

ОБЪЕМНАЯ ВСТАВКА

BULK— это оператор Transact-SQL, реализующий процесс массовой загрузки данных, вставку нескольких строк в таблицу, чтение данных из внешнего последовательного файла. Использование BULK INSERTприводит к лучшей производительности, чем процессы, которые выдают отдельные INSERTоператоры для каждой добавляемой строки. Дополнительные сведения доступны в MSDN.

ПОПРОБУЙ ПОЙМАТЬ

Начиная с SQL Server 2005, [1] Microsoft ввела дополнительную TRY CATCHлогику для поддержки поведения типа исключения. Такое поведение позволяет разработчикам упростить свой код и исключить @@ERRORпроверку после каждого оператора выполнения SQL.

-- начать транзакцию BEGIN TRAN ; BEGIN TRY -- выполнить каждый оператор INSERT INTO MYTABLE ( NAME ) VALUES ( 'ABC' ); INSERT INTO MYTABLE ( NAME ) VALUES ( '123' );             -- зафиксировать транзакцию COMMIT TRAN ; END TRY BEGIN CATCH -- откатить транзакцию из-за ошибки ROLLBACK TRAN ; END CATCH ;        

Смотрите также

Ссылки

  1. ^ «Улучшения T-SQL в SQL Server 2012», Джонатан Аллен, 19 марта 2012 г., infoq.com

Внешние ссылки