Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Многократное объявление табличной переменной в цикле  [new]
Goga-Gola
Guest
Declare @I int = 0;

While @I < 5
Begin

    Set @I += 1;

    Declare @T Table (I int);

    Insert @T Select @I;

End;

Select * From @T;


Задали вопрос. Ни разу не сталкивался. НО!
Почему в одном запросе можно спокойно объявить табличную переменную? При чем она не инициализируется, а "раздувается" ?
4 дек 17, 17:18    [21005077]     Ответить | Цитировать Сообщить модератору
 Re: Многократное объявление табличной переменной в цикле  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7658
Goga-Gola,

переменные создаются один раз при просмотре текста процедуры.
4 дек 17, 17:22    [21005091]     Ответить | Цитировать Сообщить модератору
 Re: Многократное объявление табличной переменной в цикле  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Это не только к табличным переменным относится (которые нужно чистить самим, чтобы не "раздувались"), но и к переменным:

DECLARE @T TABLE (I INT)
DECLARE @I INT = 0

WHILE @I < 5 BEGIN

    SET @I += 1

    --DELETE FROM @T
    INSERT @T SELECT @I

END

SELECT * FROM @T
GO

IF 1=0 BEGIN
    DECLARE @A INT = 100
END

SELECT @A
4 дек 17, 17:27    [21005093]     Ответить | Цитировать Сообщить модератору
 Re: Многократное объявление табличной переменной в цикле  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
The scope of a local variable is the batch in which it is declared.

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-local-variable-transact-sql

Переменные создаются на этапе компиляции пакета.
4 дек 17, 17:34    [21005110]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить