Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Goga-Gola, переменные создаются один раз при просмотре текста процедуры. |
4 дек 17, 17:22 [21005091] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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 | ![]() |