События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
конечной точке аналитики платформы Аналитики Azure Synapse Analytics
(PDW)
в Microsoft Fabric
Хранилище в базе данных Microsoft Fabric
SQL в Microsoft Fabric
Задает указанную локальную переменную, созданную ранее с помощью DECLARE @local_variable
инструкции, в указанное значение.
Соглашения о синтаксисе Transact-SQL
Синтаксис для SQL Server, базы данных SQL Azure или управляемого экземпляра SQL Azure:
SET
{ @local_variable
[ . { property_name | field_name } ] = { expression | udt_name { . | :: } method_name }
}
| { @SQLCLR_local_variable.mutator_method }
| { @local_variable
{ += | -= | *= | /= | %= | &= | ^= | |= } expression
}
| { @cursor_variable =
{ @cursor_variable | cursor_name
| { CURSOR [ [ LOCAL | GLOBAL ] ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR { READ ONLY | UPDATE [ OF column_name [ , ...n ] ] } ]
}
}
}
Синтаксис для Azure Synapse Analytics и параллельного хранилища данных и Microsoft Fabric:
SET @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression
Имя переменной любого типа, за исключением cursor, text, ntext, image или table. Имена переменных должны начинаться с одного символа (@
). Имена переменных должны соответствовать правилам для идентификаторов.
Свойство определяемого пользователем типа.
Общее поле определяемого пользователем типа.
Имя определяемого пользователем типа среды CLR.
Указывает метод пользовательского типа среды CLR. Для метода экземпляра (нестатическое) используйте период (.
). Для статического метода используйте две двоеточия (::
). Для обращения к методу, свойству или полю определяемого пользователем типа среды CLR необходимо разрешение EXECUTE для этого типа.
Метод определяемого пользователем типа, который принимает один или несколько аргументов для изменения состояния экземпляра типа. Статические методы должны быть общими.
Переменная, тип которой находится в сборке. Дополнительные сведения см . в концепциях программирования интеграции среды CLR.
Метод из сборки, который может менять состояние объекта. К этому методу применяется свойство SQLMethodAttribute.IsMutator.
Составной оператор присваивания:
+=
— Добавление и назначение-=
— вычитать и назначать*=
- Умножение и назначение/=
— Деление и назначение%=
- Модуло и назначение&=
- Битовое AND
и назначение^=
- Битовое XOR
и назначение|=
- Битовое OR
и назначениеЛюбое допустимое выражение.
Имя переменной курсора. Если переменная целевого курсора ранее ссылалась на другой курсор, эта ссылка будет удалена.
Имя курсора, объявленного с помощью инструкции DECLARE CURSOR
.
Указывает, что SET
инструкция содержит объявление курсора.
Указывает, что курсор поддерживает все параметры получения: FIRST
, LAST
, , NEXT
, PRIOR
RELATIVE
и ABSOLUTE
. Нельзя указать SCROLL
, когда вы также указываете FAST_FORWARD
.
Указывает, что курсор поддерживает только FETCH NEXT
параметр. Курсор извлекается в одном направлении с первой до последней строки. При указании FORWARD_ONLY
без STATIC
KEYSET
ключевых слов курсор DYNAMIC
реализуется как DYNAMIC
. Если вы не указываете или SCROLL
не указываете значение по умолчанию, если вы не укажет FORWARD_ONLY
ключевые слова STATIC
илиKEYSET
DYNAMIC
. FORWARD_ONLY
Для STATIC
, KEYSET
а DYNAMIC
курсоры SCROLL
— это значение по умолчанию.
Определяет курсор, который создает временную копию данных для использования курсором. Все запросы к курсору отвечают из этой временной таблицы.tempdb
Поэтому изменения, внесенные в базовые таблицы после открытия курсора, не влияют на данные, возвращенные операциями получения, которые выполняются для курсора. Кроме того, этот курсор не поддерживает изменения.
Указывает, что членство или порядок строк в курсоре неизменны при его открытии. Набор ключей, однозначно определяющих строки, встроен в ключи tempdb
. Изменения на неключевые значения в базовых таблицах, либо созданных владельцем курсора, либо зафиксированных другими пользователями, видны при прокрутке владельцем курсора содержимого курсора. Вставки, выполненные другими пользователями, не отображаются. Кроме того, невозможно выполнить вставку с помощью серверного курсора Transact-SQL.
Если строка удаляется, попытка получить строку возвращает значение @@FETCH_STATUS
-2
. Обновление значений ключа из-за границ курсора аналогично удалению старой строки с последующей вставкой новой строки. Строка с новыми значениями не отображается и пытается получить строку со старыми значениями @@FETCH_STATUS
-2
. Новые значения видны, если обновление происходит через курсор, указав WHERE CURRENT OF
предложение.
Определяет курсор, который отражает все изменения данных в строках в его результирующем наборе по мере того, как владелец курсора осуществляет прокрутку по курсору. Значения данных, порядок и членство строк в каждой выборке могут меняться. Динамические курсоры не поддерживают параметры абсолютного и относительного получения.
Указывает FORWARD_ONLY
курсор READ_ONLY
с включенными оптимизациями. FAST_FORWARD
нельзя указать, если SCROLL
также указано.
Предотвращает внесение изменений через этот курсор. Курсор нельзя ссылаться в предложении WHERE CURRENT OF
в инструкции или DELETE
инструкцииUPDATE
. Этот параметр имеет преимущество над установленной по умолчанию возможностью обновления курсора.
Указывает, что позиционированные обновления или удаления, осуществляемые с помощью курсора, гарантированно будут выполнены успешно. SQL Server блокирует строки по мере их чтения в курсор, чтобы гарантировать их доступность для последующих изменений. Нельзя указать SCROLL_LOCKS
, когда FAST_FORWARD
также указано.
Указывает, что позиционированные обновления или удаления, осуществляемые с помощью курсора, не будут выполнены, если с момента считывания в курсор строка была обновлена. SQL Server не блокирует строки по мере их чтения в курсор. Вместо этого используются сравнения значений столбца timestamp или значений контрольных сумм, если в таблице нет столбца timestamp, чтобы определить факт изменения строки после ее считывания в курсор. Если строка была изменена, то попытки позиционированного обновления или удаления будут безрезультатными. Нельзя указать OPTIMISTIC
, когда FAST_FORWARD
также указано.
Указывает, что клиенту будет отправлено предупреждение, если курсор неявно будет преобразован из одного запрашиваемого типа в другой.
Стандартная SELECT
инструкция, определяющая результирующий набор курсора. Ключевые FOR BROWSE
слова и INTO
не допускаются в select_statement объявления курсора.
Если вы используете , GROUP BY
или включаете агрегатное выражение в select_list, курсор создается как STATIC
.HAVING
UNION
DISTINCT
Если каждая базовая таблица не имеет уникального индекса и курсора ISO SCROLL
или запрашивается курсор Transact-SQL KEYSET
, курсор автоматически является курсором STATIC
.
Если select_statement содержит ORDER BY
предложение, в котором столбцы не являются уникальными идентификаторами строк, DYNAMIC
курсор преобразуется в KEYSET
курсор или STATIC
в курсор, если KEYSET
курсор не может быть открыт. Этот процесс также выполняется для курсора, определенного с помощью синтаксиса ISO, но без ключевого STATIC
слова.
Предотвращает внесение изменений через этот курсор. Курсор нельзя ссылаться в предложении WHERE CURRENT OF
в инструкции или DELETE
инструкцииUPDATE
. Этот параметр имеет преимущество над установленной по умолчанию возможностью обновления курсора. Это ключевое слово отличается от предыдущего READ_ONLY
, используя пробел вместо подчеркивания между READ
и ONLY
.
Определяет обновляемые столбцы в курсоре. Если OF <column_name> [ , ...n ]
определено, только перечисленные столбцы позволяют вносить изменения. Если список не указан, все столбцы можно обновить, если курсор не определен как READ_ONLY
.
После объявления переменной инициализируется NULL
в . Используйте инструкцию SET
, чтобы назначить значение, которое не NULL
является объявленной переменной. Инструкция SET
, которая назначает значение переменной, возвращает одно значение. При инициализации нескольких переменных используйте отдельную SET
инструкцию для каждой локальной переменной.
Вы можете использовать переменные только в выражениях, но не вместо имен объектов или ключевых слов. Чтобы создать динамические инструкции Transact-SQL, используйте EXECUTE
.
Хотя правила синтаксиса для SET @cursor_variable
включения LOCAL
ключевых слов и GLOBAL
ключевых слов, при использовании синтаксиса SET @cursor_variable = CURSOR...
курсор создается как GLOBAL
или LOCAL
, в зависимости от параметра локальной базы данных курсора по умолчанию.
Переменные курсора всегда локальные, даже если ссылаются на глобальный курсор. Если переменная курсора ссылается на глобальный курсор, курсор имеет ссылки как на глобальный, так и на локальный курсоры. Дополнительные сведения см. в разделе "Пример D", использование SET с глобальным курсором.
Дополнительные сведения см. в разделе DECLARE CURSOR (Transact-SQL).
Оператор составного назначения можно использовать в любом месте назначения с выражением справа от оператора, включая переменные, а также SET
в операторе , а также RECEIVE
в UPDATE
SELECT
операторе .
Не используйте переменную в операторе SELECT
для объединения значений (т. е. для вычисления статистических значений). Непредвиденные результаты запроса могут возникать, так как все выражения в SELECT
списке (включая назначения) не обязательно выполняются ровно один раз для каждой выходной строки. Дополнительные сведения см. в 287515 базы знаний.
Требуется членство в роли public. Все пользователи могут использовать SET @local_variable
.
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Следующий пример создает переменную @myVar
, записывает строковое значение в переменную и печатает значение переменной @myVar
.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT @myVar;
GO
В следующем примере создается локальная переменная с именем @state
и используется локальная переменная в SELECT
инструкции для поиска имени () и имени семьи (FirstName
LastName
) всех сотрудников, живущих в состоянииOregon
.
USE AdventureWorks2022;
GO
DECLARE @state CHAR(25);
SET @state = N'Oregon';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City
FROM HumanResources.vEmployee
WHERE StateProvinceName = @state;
GO
Следующие два примера позволяют получить один и тот же результат. Каждый пример создает локальную переменную с именем @NewBalance
, умножает ее 10
на, а затем отображает новое значение локальной переменной в инструкции SELECT
. Во втором примере используется составной оператор присваивания.
/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT @NewBalance;
GO
/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT @NewBalance;
GO
Следующий пример создает локальную переменную и устанавливает переменную курсора в значение имени глобального курсора.
DECLARE my_cursor CURSOR GLOBAL
FOR SELECT * FROM Purchasing.ShipMethod
DECLARE @my_variable CURSOR ;
SET @my_variable = my_cursor ;
--There is a GLOBAL cursor declared(my_cursor) and a LOCAL variable
--(@my_variable) set to the my_cursor cursor.
DEALLOCATE my_cursor;
GO
--There is now only a LOCAL variable reference
--(@my_variable) to the my_cursor cursor.
Следующий пример использует инструкцию SET
для определения курсора.
DECLARE @CursorVar CURSOR;
SET @CursorVar = CURSOR SCROLL DYNAMIC
FOR
SELECT LastName, FirstName
FROM AdventureWorks2022.HumanResources.vEmployee
WHERE LastName like 'B%';
OPEN @CursorVar;
FETCH NEXT FROM @CursorVar;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM @CursorVar
END;
CLOSE @CursorVar;
DEALLOCATE @CursorVar;
GO
Следующий пример использует запрос для присваивания значения переменной.
USE AdventureWorks2022;
GO
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);
SELECT @rows;
GO
В следующем примера устанавливается значение для определяемого пользователем типа Point
путем изменения значения свойства типа X
.
DECLARE @p Point;
SET @p.X = @p.X + 1.1;
SELECT @p;
GO
Узнайте подробнее о создании Point
, на который ссылается UDT в этом примере и в следующих примерах в разделе Создание определяемых пользователем типов.
Следующий пример устанавливает значение определяемого пользователем типа point путем вызова метода SetXY
типа.
DECLARE @p Point;
SET @p=point.SetXY(23.5, 23.5);
В следующем примере создается переменная для типа Point
, а затем выполняется метод мутатора в Point
.
CREATE ASSEMBLY mytest FROM 'c:\test.dll' WITH PERMISSION_SET = SAFE
CREATE TYPE Point EXTERNAL NAME mytest.Point
GO
DECLARE @p Point = CONVERT(Point, '')
SET @p.SetXY(22, 23);
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Следующий пример создает переменную @myVar
, записывает строковое значение в переменную и печатает значение переменной @myVar
.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT TOP 1 @myVar FROM sys.databases;
В следующем примере создается локальная переменная с именем @dept
и используется эта локальная переменная в SELECT
инструкции для поиска имени () и имени семьи (FirstName
LastName
) всех сотрудников, работающих в отделеMarketing
.
DECLARE @dept CHAR(25);
SET @dept = N'Marketing';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name
FROM DimEmployee
WHERE DepartmentName = @dept;
Следующие два примера позволяют получить один и тот же результат. Они создают локальную переменную с именем @NewBalance
, умножают ее на 10
и отображают новое значение локальной переменной в инструкции SELECT
. Во втором примере используется составной оператор присваивания.
/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;
/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;
Следующий пример использует запрос для присваивания значения переменной.
-- Uses AdventureWorks
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM dbo.DimCustomer);
SELECT TOP 1 @rows FROM sys.tables;
События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!