Временные таблицы t sql: MS SQL Server и T-SQL
Содержание
sql server — Отличие способов хранения результирующих данных в T-SQL
Вопрос задан
Изменён
7 лет 3 месяца назад
Просмотрен
539 раз
Какие основные отличия этих сущностей?
- временная таблица
- обобщенное табличное выражение
- курсор
- sql
- sql-server
Временные таблицы бывают двух видов. Таблицы переменные(@Table), временные таблицы(#table), ещё есть таблицы вида ##table, отличаются от #table областью видимости.
В связи с этим, можно дать краткое описание:
Таблицы переменные — хранятся в оперативной памяти(если её хватает). Доступна в блоке кода, т.е. её можно переиспользовать в разных запросах. имеет локальную область видимости, так же как любая другая локальная переменная.
Временные таблицы. Хранятся в tempdb, имеют более широкую область видимости, а именно по всему стеку вызовов. Т.е. если процедура А создала таблицу #A, потом вызвала процедуру B, которая создала таблицу #B — то и А имеет доступ к #B(после вызова В) и В имеет доступ к #A. Так же на временные таблицы можно создавать индексы, триггеры и прочее, в отличии от таблиц переменных.
Таблицы ##Table имеют глобальную область видимости. Если кто-то создал таблицу ##Table — её видят все сессии, а существует она до тех пор, пока «жива» хоть одна сессия, которая обращалась к этой таблице.СТЕ. Тут область вилимости только внутри одного запроса! Т.е. переиспользовать результат нельзя. Более того, если вы обращаетесь к СТЕ несколько раз внутри одного апроса — она будет вычислена столько же раз! Есть недокументированные способы заставить оптимизатор запомнить СТЕ в оперативной памяти для повторного использования, но это совсем другая история:)
Курсоры. В общем это немного из другой оперы… Курсоры позволяют построчно обрабатывать данные и предназначены не для хранения. Внутри курсора можно вызывать выполнение процедур, чего нельзя делать в запросе.
Добавлю ещё своё субъективное мнение когда что нужно использовать.
Таблицы переменные. Когда нужно использовать небольшое количество данных. Например промежуточный результат сложного запроса записать в таблицу переменную, разбив тем самым сложный запрос на два простых.
Временные таблицы. Когда информации довольно много и/или её нужно передать в другое место выполнения. Эти таблицы ничем не отличаются от обычных таблиц, кроме того, что не нужно беспокоиться о их очищении и удалении.
СТЕ — когда нельзя использовать временные таблицы(т.е. такие места, которые обязывают нас использовать только один SQL запрос), Например, внутри тела табличной функции.
Курсоры — когда нельзя обойтись другими способами. Например, когда для каждой строки временного результата нужно запустить выполнение хранимой процедуры. В MS SQL курсоры обычно работают медленнее запросов. Так что елси есть возможность — лучше их избегать.
1
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
MS SQL: как изменить тип столбца и создать временную таблицу
Продолжаем нашу серию статей про MS SQL. Сегодня остановимся на двух важных моментах в работе с этой СУБД:
- Как изменить тип данных столбца в MS SQL?
- Как создать временную таблицу в MS SQL?
Напомним, что MS SQL — это система управления базами данных, разработанная компанией Майкрософт. От других подобных систем отличается тем, что для запросов к базе данных используется не «чистый» SQL, а язык запросов Transact-SQL, который также разработан компанией Майкрософт. MS SQL — это СУБД, которая используется как в частном порядке, так и предприятиями для управления огромными базами данных.
Как изменить тип столбца в MS SQL
Перед тем как изменить тип данных столбца в MS SQL, нужно осознавать возможные риски. Если проводить эту операцию над столбцами, в которых уже хранится какая-то информация, тогда можно полностью потерять эту информацию. Помимо этого изменение типа столбца может повлечь сбои в работе приложений и других таблиц, которые используют этот столбец в своих расчетах. Но самое интересное, что при изменении типа данных работающего столбца, можно привлечь каскадные сбои в работе налаженной системы. Например, изменив тип данных столбца вы активируете сбой программы, которая его использует. Сбой в той программе активирует сбои в других системах или программах и так далее по цепочке. Поэтому, прежде чем изменить тип данных работающего столбца, нужно трезво оценить вероятные риски.
Изменить тип столбца в MS SQL можно двумя способами:
- использовать конструктор таблиц SQL — Server Management Studio;
- использовать язык запросов T-SQL.
Как изменить тип столбца в Server Management Studio
Server Management Studio — это программа с графическим интерфейсом, которая используется для создания и управления таблицами в MS SQL. Для того чтобы изменить тип столбца, используя эту программу, нужно:
Откройте программу Server Management Studio.
В «Обозревателе объектов» программы найдите таблицу, в которой нужно внести изменения.
После этих действий вам откроется конструктор таблицы, где можно проводить любые манипуляции со столбцами, в том числе и изменить тип данных столбца SQL.
Выберите столбец, у которого хотите изменить тип данных.
Откройте «Свойства» этого столбца и найдите пункт «Тип данных» и измените на нужный тип.
Сохраните изменения.
Этот способ хорош тем, что не требует знаний языка T-SQL для работы с таблицами. Однако при первой попытке внести изменения в тип данных столбца с помощью конструктора у вас ничего не получится, потому что в конструкторе определен параметр, мешающий вносить такие изменения. Его нужно отключить. Для этого нужно:
- найти в основном меню раздел «Сервис»;
- в нем отыскать подраздел «Параметры»;
- там отыскать пункт «Конструкторы»;
- в нем нажать на подпункт «Конструкторы таблиц и баз данных»;
- снять «галочку» с пункта «Запретить сохранение изменений, требующих повторного создания таблицы».
После того как этот пункт будет отключен, вы сможете вносить любые изменения в таблицу, используя конструктор. Если вносить изменения, используя язык T-SQL, тогда не нужно снимать никаких ограничений.
Как изменить тип данных столбца в MS SQL, используя язык T-SQL
Для того чтобы воздействовать как-то на таблицу, нужно использовать специальную инструкцию «ALTER TABLE». Ее возможности довольно обширны при редактировании таблиц, но нас интересует как с ее помощью изменить тип данных столбца.
Шаблон использования этой инструкции для изменения типа данных столбца такой:
ALTER TABLE <Table_Name>
ALTER COLUMN <Column_Name> <новый тип данных>
Как создать временную таблицу в MS SQL
Создание временной таблицы в MS SQL нужно в том случае, когда нужно кратковременно сохранить какую-то информацию при работе со сложными таблицами. Временные таблицы хранятся в течение одной сессии работы. То есть до тех пор пока открыт редактор запросов, будет существовать временная таблица. Как только вы закончите работу с таблицами и закроете редактор, так сразу временная таблица будет удалена.
Важная особенность — наименование временной таблицы начинается с решетки «#». Если в наименовании временной таблицы стоит одна решетка — это означает, что создается локальная временная таблица. Такая таблица доступна будет только вам. Если в названии указать две решетки, тогда будет создана глобальная временная таблица. Такая таблица будет доступна всем пользователям, которые на данный момент работают с основной базой данных.
Создать локальную временную базу данных можно по такому шаблону:
CREATE TABLE #Temporary_Table
(описание столбцов таблицы)
INSERT INTO #Temporary_Table
VALUES(описание значений ячеек столбца)
Если во время сеанса вам нужно удалить созданную временную таблицу, тогда это делается при помощи вот такой инструкции:
DROP TABLE #Temporary_Table
Временные таблицы хороши тем, что их можно использовать как обычную таблицу. Но нужно помнить, что после окончания рабочей сессии временная таблица перестанет существовать.
Заключение
Работая с MS SQL или другими СУБД, нужно уметь правильно оценивать риски при работе с таблицами, чтобы не навредить. Сегодня мы рассмотрели две важные операции:
- как изменить тип данных столбца в MS SQL двумя способами;
- как создать временную таблицу.
На этом серия статей о работе с MS SQL не заканчивается. В следующих статьях мы разберем другие возможности этой СУБД.
Локальные и глобальные временные таблицы SQL Server
Автор: Rick Dobson |
Комментарии | Похожие: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Подробнее > Временные таблицы
Проблема
Временные таблицы являются временными в том смысле, что они существуют до тех пор, пока база данных
соединение, которое создало и заполнило их, существует. После того, как соединение
закрыта, временная таблица удаляется с SQL Server. Вы также можете явно удалить
временную таблицу, даже когда соединение остается открытым (например, когда значения
во временной таблице больше не нужны). Существует две разновидности временных таблиц.
Локальные временные таблицы доступны только из контекста их создания, например из соединения.
Глобальные временные таблицы доступны из других контекстов соединения. Оба местные
и глобальные временные таблицы находятся в базе данных tempdb. В этом разделе мы
будет охватывать каждое из этих понятий.
Решение
Для приведенных ниже примеров мы используем
База данных AdventureWorks2014. Загрузите копию и восстановите на свой экземпляр
SQL Server для тестирования приведенных ниже сценариев.
Создание и заполнение локальных временных таблиц SQL Server
Имя локальной временной таблицы начинается с одного знака #. Хотя вы можете создать
локальная временная таблица из любого контекста базы данных, локальная временная таблица всегда находится
в базе данных tempdb. Поскольку локальная временная таблица является таблицей базы данных, вы
необходимо удалить любую предыдущую версию локальной временной таблицы, прежде чем вы сможете создать и заполнить
свежая версия локальной временной таблицы.
Вы можете создать и заполнить локальную временную таблицу так же, как и любую другую таблицу базы данных.
Например, вы можете использовать оператор select с предложением into. Все
другие предложения оператора select, кроме предложения into, определяют результирующий набор для заполнения
локальная временная таблица. Элементы списка выбора указывают столбцы для локальной временной
стол. Аргумент into указывает имя локального временного
стол.
В следующем сценарии показан некоторый синтаксис для создания трех локальных временных таблиц.
- Оператор использования указывает, что код работает в контексте Temporary_Data_Stores_Tutorial
база данных. Эта база данных используется в нескольких разделах данного отчета. В
следующий сценарий T-SQL, имя базы данных не имеет решающего значения для
действие кода. Поэтому вы можете использовать любую другую базу данных, которая
Вы предпочитаете. - Далее три блока try…catch удаляют предыдущие версии локальной временной таблицы.
если они существуют с именами #женат_мужчина, #замужем_женщина и #незамужем. - Каждая из трех локальных временных таблиц основана на подмножествах таблицы Employee.
таблица схемы HumanResources в образце. Подмножества задаются настройками в предложении where для оператора select.
создание и заполнение каждой локальной временной таблицы. - Предложение into в каждом операторе select указывает локальную временную таблицу
имя для результирующего набора, разработанного остальной частью синтаксиса оператора select.
ИСПОЛЬЗОВАНИЕ [Temporary_Data_Stores_Tutorial] ИДТИ -- удалить локальные временные таблицы НАЧАТЬ ПОПРОБУЙТЕ УДАЛИТЬ ТАБЛИЦУ #женат_мужчина КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ PRINT '#married_male недоступен для сброса' КОНЦЕВОЙ ЗАХВАТ НАЧАТЬ ПОПРОБУЙТЕ DROP TABLE #married_female КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ PRINT '#married_female недоступен для сброса' КОНЦЕВОЙ ЗАХВАТ НАЧАТЬ ПОПРОБУЙТЕ УДАЛИТЬ ТАБЛИЦУ #not_married КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ PRINT '#not_married недоступен для сброса' КОНЦЕВОЙ ЗАХВАТ -- заполнить локальную временную таблицу для женатых сотрудников-мужчин ВЫБИРАТЬ [BusinessEntityID] INTO #married_male ОТ [AdventureWorks2014]. [Отдел кадров].[Сотрудник] ГДЕ [Семейное положение] = 'М' И пол = 'М' -- заполнить локальную временную таблицу для замужних сотрудниц ВЫБИРАТЬ [BusinessEntityID] INTO #married_female ОТ [AdventureWorks2014].[Отдел кадров].[Сотрудник] ГДЕ [Семейное положение] = 'М' И пол = 'F' -- заполнить локальную временную таблицу для сотрудников, не состоящих в браке ВЫБИРАТЬ [BusinessEntityID] INTO #not_married ОТ [AdventureWorks2014].[Отдел кадров].[Сотрудник] ГДЕ [Семейное положение] != 'M'
На следующем снимке экрана показано содержимое вкладки «Сообщения» из SSMS.
Вкладка «Результаты» отсутствует, поскольку операторы SELECT создают и заполняют локальные
временные таблицы вместо заполнения наборов результатов, которые можно отобразить.
code генерирует три набора результатов для создания и заполнения локальных временных таблиц.
Сценарий создает три набора результатов с числом строк 97, 49 и 144 в каждом.
Сумма этих счетчиков строк равна общему количеству строк в таблице сотрудников.
в схеме HumanResources базы данных AdventureWorks2014.
Предыдущий сценарий работает с тремя базами данных.
- Оператор USE указывает базу данных Temporary_Data_Stores_Tutorial.
Это база данных по умолчанию для работы кода в скрипте. - Ссылка в конце этого раздела обозначает одно место для загрузки
База данных AdventureWorks2014 вместе с выпусками баз данных AdventureWorks
для других версий SQL Server, кроме SQL Server 2014. AdventureWorks2014
база данных явно относится к предыдущему сценарию, поскольку код использует
имя из трех частей для обозначения имени исходной таблицы в предложении from.
Без имени базы данных, составляющего трехчастное имя в предложении from,
код по умолчанию будет искать схему HumanResources для таблицы Employee
в базе данных Temporary_Data_Stores_Tutorial. - Третья база данных, на которую неявно ссылается предыдущий сценарий, — это
база данных tempdb. Любая таблица, имя которой начинается с символа #, находится
в tempdb как локальную временную таблицу для текущего подключения к базе данных.
Создание и заполнение глобальных временных таблиц SQL Server
В следующем коде показано, как создавать и заполнять глобальные временные таблицы.
Если вы сравните следующий сценарий с предыдущим сценарием, легко заметить
что имена таблиц начинаются с двух ведущих знаков решетки (##). В следующих
script, глобальные имена таблиц — ##not_married и ##married. Кроме как
ведущая двойная решетка, процесс создания и заполнения
глобальная временная таблица такая же, как и для локальной временной таблицы.
-- удалить глобальные временные таблицы НАЧАТЬ ПОПРОБУЙТЕ УДАЛИТЬ ТАБЛИЦУ ##not_married КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ PRINT '##not_married недоступен для сброса' КОНЦЕВОЙ ЗАХВАТ НАЧАТЬ ПОПРОБУЙТЕ DROP TABLE ##женат КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ PRINT '##замужем нельзя сбросить' КОНЦЕВОЙ ЗАХВАТ -- не состоящие в браке сотрудники в глобальной временной ВЫБЕРИТЕ [BusinessEntityID] INTO ##not_married ОТ [AdventureWorks2014].[Отдел кадров]. [Сотрудник] ГДЕ [Семейное положение] != 'M' -- женатые сотрудники в глобальной временной ВЫБЕРИТЕ [BusinessEntityID] INTO ##женат ОТ [AdventureWorks2014].[Отдел кадров].[Сотрудник] ГДЕ [Семейное положение] = 'М'
После выполнения предыдущего скрипта создаются две глобальные таблицы. Один
из них для всех женатых сотрудников; эта таблица имеет 146 строк. Другой
глобальная таблица для всех сотрудников, не состоящих в браке; эта таблица имеет 144 строки.
Сумма количества строк для этих двух глобальных временных таблиц совпадает с суммой количества строк.
для трех локальных временных таблиц.
Список локальных и глобальных временных таблиц SQL Server
Как администратор или даже опытный пользователь, вы можете иногда найти это полезным
чтобы вывести список всех глобальных и временных таблиц в базе данных tempdb. Любой
может запрашивать объекты в базе данных tempdb (если разрешение не отозвано явным образом, что не
рекомендуемые). Набор всех таблиц в tempdb можно получить по ссылке
tempdb. sys.tables в предложении from оператора select. Таблицы в
tempdb может быть чем-то большим, чем просто глобальные и локальные временные таблицы. Следовательно, вы
необходимо ограничить набор результатов предложением where, чтобы перечислить только глобальные временные таблицы
или локальные временные таблицы.
Следующий сценарий предоставляет синтаксис для вывода только глобальных временных таблиц.
или локальные временные таблицы. Фильтр для списка глобальных временных таблиц должен найти
все таблицы tempdb, начинающиеся с ##. Для листинга требуется фильтр из двух частей.
локальные временные таблицы. Имена локальных временных таблиц должны начинаться с #, но не начинаться
с ##.
-- список глобальных временных таблиц ВЫБИРАТЬ имя, тип, тип_описание, create_date ИЗ tempdb.sys.tables ГДЕ имя LIKE '##%' -- отображать только локальные временные таблицы ВЫБИРАТЬ имя, тип, тип_описание, create_date ИЗ tempdb.sys.tables ГДЕ имя LIKE '#%' И имя НЕ НРАВИТСЯ '##%'
На следующем экране показаны наборы результатов двух предыдущих операторов SELECT.
Верхний набор результатов предназначен для глобальных временных таблиц с именами ##not_married и ##married.
Нижний набор результатов предназначен для локальных временных таблиц с именами #married_female, #married_male,
и #незамужем.
SQL Server позволяет пользователям назначать одно и то же имя двум разным локальным временным таблицам —
пока таблицы из разных соединений. Если это произойдет, то
начальная часть обеих локальных временных таблиц будет иметь одно и то же имя.
Однако завершающая часть имени будет отличаться для каждой локальной временной таблицы.
с той же начальной частью. SQL Server отслеживает два разных локальных временных
таблицы для каждого соединения на основе конечной части имени. В этом
Таким образом, SQL Server может использовать правильную исходную локальную временную таблицу из двух разных подключений.
где каждая локальная временная таблица может иметь разные данные в своем соединении.
Ссылка на локальные и глобальные временные таблицы SQL Server в одном и том же соединении
Когда вы создаете локальные временные таблицы в соединении, вы можете ссылаться на локальные
временные таблицы в том же соединении. Локальные временные таблицы, созданные в одном соединении
нельзя ссылаться из другого соединения.
Глобальные временные таблицы могут быть
ссылаются из того же соединения или из другого соединения, пока глобальный
временная таблица не вышла за рамки.
Соединение с базой данных такое же, как и при создании временной таблицы и ссылке на нее
из скрипта на той же вкладке SSMS. Соединение с базой данных отличается
когда он создается на одной вкладке SSMS, но ссылается на другую вкладку SSMS.
Поскольку каждый файл сценария T-SQL находится на отдельной вкладке SSMS, вы можете загружать и запускать
сценарии из одних и тех же или разных файлов сценариев T-SQL и оценить влияние
соединений на возможность ссылаться на локальные и глобальные временные таблицы. глобальный
temp выходит из области видимости, когда вкладка, на которой она была создана, закрывается, и там
нет другой активной программной ссылки на него с другой вкладки.
Следующий скрипт дает простые примеры запросов к локальным временным таблицам и
глобальные временные таблицы. Запросы как для локальных, так и для глобальных временных таблиц, соответственно,
подсчитывает строки во всех локальных таблицах и во всех глобальных таблицах. Как вы можете
см. на соответствующей панели результатов, оба запроса возвращают одинаковое количество сотрудников —
а именно, 290. Это означает, что ссылки на локальные временные таблицы
соединение, используемое для создания локальных временных таблиц. Глобальная температура
на таблицы можно ссылаться на той же или другой вкладке, если соединение
используемая для создания глобальной временной таблицы, все еще открыта или есть по крайней мере еще одна
активная программная ссылка на глобальную временную таблицу.
-- количество строк для трех локальных временных таблиц -- со всеми сотрудниками AdventureWorks2014 ВЫБРАТЬ COUNT(*) count_from_local_temp_tables ОТ (ВЫБРАТЬ * ОТ #married_female СОЮЗ ВЫБЕРИТЕ * ИЗ #married_male СОЮЗ ВЫБЕРИТЕ * FROM #незамужняя) замужняя_женщина_замужняя_мужчина_не_замужняя -- количество строк для двух глобальных временных таблиц -- со всеми сотрудниками AdventureWorks2014 ВЫБЕРИТЕ COUNT (*) count_from_global_temp_tables ОТ (ВЫБРАТЬ * ОТ ##не замужем СОЮЗ ВЫБЕРИТЕ * ОТ ##замужем) не_замужем_замужем
Ссылка на локальные и глобальные временные таблицы SQL Server в другом соединении
Когда две инструкции SELECT запускаются из другого соединения, отличного от
тот, в котором они были созданы, то результат другой.
Итак, если
локальные и глобальные временные таблицы были созданы на одной вкладке (одно соединение) и запускались на другой вкладке
(второе соединение), то результат был бы другим. Оператор GO должен следовать за первым
Оператор SELECT, позволяющий соединению запускать оба оператора SELECT даже после сбоя.
в первом операторе SELECT. Оператор GO облегчает перезапуск после
ошибка.
Первый запрос, подсчитывающий строки в наборе из трех локальных временных таблиц, завершился неудачно.
Это связано с тем, что запрос SELECT, ссылающийся на локальные временные таблицы, выполняется из другого
соединение, чем соединение, используемое для создания локальных временных таблиц. Следующее
Вкладка «Сообщения» указывает на эту ошибку сообщением 208. Ошибка
сообщение указывает, что локальная временная таблица #married_female недоступна в
второе соединение. Это связано с тем, что локальная временная таблица #married_female
доступен только в соединении для того, в котором он был создан. Из
конечно, две другие локальные временные таблицы (#married_male и #not_married) также
отсутствует на второй вкладке, но первая ошибка прерывает оператор SELECT в
партия.
Второй оператор SELECT работает в другом пакете из-за оператора GO.
после первого оператора SELECT. Кроме того, этот второй оператор SELECT запрашивает
две глобальные временные таблицы. Поскольку второй оператор SELECT работает с глобальными
временные таблицы, это удается, хотя это из другого соединения, чем тот,
используется для создания глобальных временных таблиц. Отображается следующее изображение вкладки «Результаты»
результат второго запроса. Этот запрос возвращает общее количество сотрудников
из 290, что, как известно, является правильным количеством сотрудников в таблице «Сотрудники».
схемы HumanResources в базе данных AdventureWorks2014.
Локальные и глобальные временные таблицы внутри и вне хранимых процедур
Даже на одной вкладке глобальные и локальные временные таблицы могут работать по-разному.
Хранимая процедура является хорошо известным примером того, как работают два типа временных таблиц.
иначе. Локальные временные таблицы, созданные в хранимой процедуре в соединении
нельзя ссылаться вне хранимой процедуры. Однако глобальная температура
на таблицы, созданные внутри хранимой процедуры, можно ссылаться из-за пределов хранимой процедуры.
процедура.
Следующий скрипт демонстрирует, как ссылки на локальные временные таблицы и глобальные
временные таблицы работают, когда временная таблица создается в хранимой процедуре, но она
ссылается вне хранимой процедуры. Обратите внимание, что for_local_and_global_temp_tables_demo
хранимая процедура создает две временные таблицы. Одна таблица с именем #married_male_from_proc
это локальная временная таблица. Другая таблица с именем ##not_married_from_proc является глобальной.
временная таблица.
Скрипт создает хранимую процедуру for_local_and_global_temp_tables_demo
в базе данных Temporary _Data_Stores_Tutorial с помощью оператора create proc.
Хранимая процедура очень проста. Один оператор select в создает и
заполняет #married_male_from_proc, локальную временную таблицу. Другой выбор в
Оператор создает и заполняет глобальную временную таблицу ##not_married_from_proc.
После инструкции create proc инструкция exec вызывает for_local_and_global_temp_tables_demo
хранимая процедура в своем собственном пакете.
Затем оператор SELECT в своем собственном пакете пытается выполнить оператор SELECT.
в локальной временной таблице, созданной в хранимой процедуре. Несмотря на то, что местные
временная таблица, созданная в хранимой процедуре, находится на той же вкладке, что и оператор выбора
при запросе временной таблицы вне хранимой процедуры запрос завершается ошибкой.
Вкладка «Сообщения» показывает, что ошибка связана с недопустимым именем объекта. Это следует из
тот факт, что имя локальной таблицы, #not_married_from_proc, имеет область действия,
ограничивается хранимой процедурой.
С другой стороны, оператор SELECT для глобальной временной таблицы с именем ##not_married_from_proc
завершается успешно вне хранимой процедуры. Глобальная временная таблица не ограничена
в область внутри хранимой процедуры. Возвращает количество сотрудников, которые
не женаты. Этот счетчик проверяется другим запросом, который выполняется напрямую.
против таблицы Employee в схеме HumanResources AdventureWorks2014
база данных.
Следующие шаги
Вот несколько ссылок на ресурсы, которые могут оказаться полезными для развития вашего
понимание содержания из этого раздела учебника.
Примеры баз данных AdventureWorks
Установите собственную копию базы данных SQL Server AdventureWorks2014
Различия между временными таблицами SQL Server и табличными переменными
Введение во временные таблицы в SQL Server
Временные таблицы в SQL Server
Временные таблицы SQL Server
Как получить список глобальных временных таблиц в текущей базе данных?
Есть ли способ получить список всех текущих временных таблиц в SQL Server?
база данных tempdb в хранилище параллельных данных
Об авторе
Рик Добсон — писатель и индивидуальный трейдер. Он также является профессионалом в области SQL Server с многолетним опытом работы с T-SQL, в том числе написанием книг, проведением национальных семинаров, работой с предприятиями над проектами в области финансов и здравоохранения, а также постоянным вкладчиком в MSSQLTips.com. Он оттачивал свои навыки работы с Python в течение более чем пятидесяти лет, особенно для визуализации данных и задач ETL с файлами JSON и CSV. Его последние профессиональные увлечения включают данные и анализ финансовых временных рядов, модели искусственного интеллекта и статистику. Он считает, что правильное применение этих навыков может помочь трейдерам и инвесторам принимать более прибыльные решения.
Посмотреть все мои советы
Руководства по разработке SQL Server и T-SQL Ресурсы для разработчиков, статьи, учебные пособия, образцы кода, инструменты и загрузки для ASP. Net, SQL Server, Reporting Services, T-SQL, Windows, AWS, SAP HANA и ABAP |