удаление временной таблицы на SQL-сервере? Sql удалить временную таблицу


sql - удаление временной таблицы на SQL-сервере?

У меня возникают проблемы с удалением таблицы temp на SQL-сервере.

У меня есть хранимая процедура, но когда я запускаю через мое приложение, он говорит:

"В базе уже есть объект с именем" #WeekList ",

когда я пытаюсь удалить таблицу, я получаю следующее сообщение:

Невозможно удалить таблицу "#WeekList", потому что она не существует или у вас нет разрешения.

Мой SP выглядит следующим образом:

USE [test_staff] GO /****** Object: StoredProcedure [dbo].[sp_create_week_list] Script Date: 03/20/2012 09:35:42 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_create_week_list] AS CREATE TABLE #WeekList ( month_date date ) DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10) SELECT @REPORT_DATE = '2011-01-19T00:00:00' --SELECT @REPORT_DATE = GETDATE() -- should grab the date now. SELECT @WEEK_BEGINING = 'MONDAY' IF @WEEK_BEGINING = 'MONDAY' SET DATEFIRST 1 ELSE IF @WEEK_BEGINING = 'TUESDAY' SET DATEFIRST 2 ELSE IF @WEEK_BEGINING = 'WEDNESDAY' SET DATEFIRST 3 ELSE IF @WEEK_BEGINING = 'THURSDAY' SET DATEFIRST 4 ELSE IF @WEEK_BEGINING = 'FRIDAY' SET DATEFIRST 5 ELSE IF @WEEK_BEGINING = 'SATURDAY' SET DATEFIRST 6 ELSE IF @WEEK_BEGINING = 'SUNDAY' SET DATEFIRST 7 DECLARE @WEEK_START_DATE DATETIME, @WEEK_END_DATE DATETIME --GET THE WEEK START DATE SELECT @WEEK_START_DATE = @REPORT_DATE - (DATEPART(DW, @REPORT_DATE) - 1) --GET THE WEEK END DATE SELECT @WEEK_END_DATE = @REPORT_DATE + (7 - DATEPART(DW, @REPORT_DATE)) PRINT 'Week Start: ' + CONVERT(VARCHAR, @WEEK_START_DATE) PRINT 'Week End: ' + CONVERT(VARCHAR, @WEEK_END_DATE) DECLARE @Interval int = datediff(WEEK,getdate(),@WEEK_START_DATE)+1 SELECT Start_Week=@WEEK_START_DATE , End_Week=@WEEK_END_DATE INTO #WeekList WHILE @Interval <= 0 BEGIN set @WEEK_START_DATE=DATEADD(WEEK,1,@WEEK_START_DATE) set @WEEK_END_DATE=DATEADD(WEEK,1,@WEEK_END_DATE) INSERT INTO #WeekList values (@WEEK_START_DATE,@WEEK_END_DATE) SET @Interval += 1; END SELECT CONVERT(VARCHAR(11), Start_Week, 106) AS 'Start', CONVERT(VARCHAR(11), End_Week, 106) AS 'End', DATEDIFF(DAY, 0, Start_Week) / 7 AS week_ref -- create the unique week reference number FROM #WeekList ORDER BY Start_Week DESC DROP TABLE #WeekList

qaru.site

sql-server - Не удалось удалить временную таблицу

У меня есть хранимая процедура, которая использует временную таблицу. Дело в том, что я пытался использовать временную таблицу более одного раза в разных SELECT INTO. Конечно, перед выпуском следующего оператора я выпустил DROP #TempTableName а затем выдал SELECT INTO. По-видимому, этого оператора DROP недостаточно, так как следующий SELECT INTO жалуется, что объект #TempTableName уже существует - выход #TempTableName:

Msg 2714, уровень 16, состояние 1, процедура SYNC_SpreadMembers, строка 23 В базе данных уже есть объект с именем "#MM_SYNC_MEMBERS".

И вот мой код T-SQL:

CREATE PROCEDURE SYNC_SpreadMembers AS BEGIN BEGIN -- Member IF (OBJECT_ID('tempdb..#MM_SYNC_MEMBERS') IS NOT NULL) DROP TABLE #MM_SYNC_MEMBERS; -- Imported members SELECT DISTINCT MemberInr INTO #MM_SYNC_MEMBERS FROM ( SELECT DISTINCT DmInr AS MemberInr FROM MM_SYNC_EBOLIGWS WHERE NOT DmInr IS NULL UNION SELECT DISTINCT AmInr AS MemberInr FROM MM_SYNC_EBOLIGWS WHERE NOT AmInr IS NULL ) MemberHeap ; DELETE #MM_SYNC_MEMBERS FROM #MM_SYNC_MEMBERS Sync INNER JOIN MM_Member Member ON Sync.MemberInr = Member.InteressentNr; INSERT INTO MM_Member(InteressentNr) SELECT MemberInr FROM #MM_SYNC_MEMBERS; END -- Hardcoded members DROP TABLE #MM_SYNC_MEMBERS; SELECT DISTINCT InteressentNr AS MemberInr INTO #MM_SYNC_MEMBERS FROM MM_SYNC_HardcodedMemberRoles; DELETE #MM_SYNC_MEMBERS FROM #MM_SYNC_MEMBERS Sync INNER JOIN MM_Member Member ON Sync.MemberInr = Member.InteressentNr; INSERT INTO MM_Member(InteressentNr) SELECT MemberInr FROM #MM_SYNC_MEMBERS; -- MemberRole -- Area Managers DELETE MM_MemberRole; INSERT INTO MM_MemberRole(MemberSid, RoleSid) SELECT DISTINCT Member.[Sid], (SELECT [Sid] FROM MM_Role WHERE Cipher LIKE 'AMA') FROM MM_SYNC_EBOLIGWS Sync INNER JOIN MM_Member Member ON Sync.AmInr = Member.InteressentNr WHERE Sync.AmInr IS NOT NULL ; -- Department Managers INSERT INTO MM_MemberRole(MemberSid, RoleSid) SELECT DISTINCT Member.[Sid], (SELECT Sid FROM MM_Role WHERE Cipher LIKE 'DM') FROM MM_SYNC_EBOLIGWS Sync INNER JOIN MM_Member Member ON Sync.DmInr = Member.InteressentNr WHERE Sync.DmInr IS NOT NULL ; -- Hardcoded Roles INSERT INTO MM_MemberRole(MemberSid, RoleSid) SELECT Member.Sid, Roles.Sid FROM MM_SYNC_HardcodedMemberRoles HCR INNER JOIN MM_Member Member ON HCR.InteressentNr = Member.InteressentNr INNER JOIN MM_Role Roles ON HCR.RoleCipher = Roles.Cipher ; END GO источник поделиться

qaru.site

Удаление потерянных таблиц в MySQL (Orphan Temporary Tables)

Иногда во время выполнения определенных операций над таблицами (ALTER TABLE) может произойти аварийное завершение процесса mysqld, после запуска MySQL таблица над которой производилась операция становится потерянной (осиротевшей). Такие таблицы могут занимать дисковое пространство и висеть мертвым грузом.

Давайте разберемся как их удалять.

Исходные данные: Oracle MySQL v5.7.23

Документация по MySQL говорит нам, что имена всех потерянных таблиц начинаются с префикса #sql- (например: #sql-543_6). На диске эти таблицы будут иметь такие же имена файлов с расширением .frm и .ibd (например: #sql-543_6.frm и #sql-543_6.ibd).

Если в каталоге базы данных нет файла .frm для потерянной таблицы, то его нужно будет воссоздать, он должен иметь ту же структуру, что и потерянная таблица (имена столбцов, типы, размер и индексы).

Для проверки наличия потерянных (осиротевших) таблиц можно выполнить такой запрос:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%'; +----------+---------------------+------+--------+--------+-------------+------------+---------------+------------+ | TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE | +----------+---------------------+------+--------+--------+-------------+------------+---------------+------------+ | 716340 | mydb/#sql-314e_1acd | 1 | 7 | 716310 | Antelope | Compact | 0 | Single | +----------+---------------------+------+--------+--------+-------------+------------+---------------+------------+ 1 row in set (0.00 sec)

Здесь мы видим, что у нас есть 1 потерянная таблица в базе mydb.

Проверим наличие файлов данных этой таблицы:

# ls -l /var/lib/mysql/mydb | grep sql-314e_1acd -rw-r----- 1 mysql mysql 8708 Sep 2 02:51 #sql-314e_1acd.frm -rw-r----- 1 mysql mysql 171966464 Sep 2 02:50 #sql-314e_1acd.ibd

Файлы .frm и .ibd есть, значит мы можем удалить эту потерянную таблицу. Занимает она конечно немного места, но были случаи когда потерянные таблички занимали по несколько гигабайт, а на платных VDS каждый гигабайт стоит денег, так что экономия на лицо.

Для удаления потерянной таблицы используется привычная команда DROP TABLE, но с дополнительным префиксом #mysql50# перед именем таблицы, который указывает MySQL, что нужно игнорировать небезопасную кодировку в имени файла. Имя таблицы должно быть заключено в обратные кавычки, это так же важно, т.к. в имени таблицы присутствует специальный символ #

Выполняем:

mysql> use mydb; Database changed mysql> DROP TABLE `#mysql50##sql-314e_1acd`; Query OK, 0 rows affected (0.13 sec)

Потерянная табличка успешно удалена. Вы можете проверить наличие файлов данных и запрос к INFORMATION_SCHEMA.INNODB_SYS_TABLES указанный выше, они покажут что больше у нас нет потерянных таблиц.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.

blog.programs74.ru

удаление временной таблицы на SQL-сервере? MS SQL Server

У меня возникают проблемы с удалением таблицы temp на SQL-сервере.

У меня есть хранимая процедура, но когда я запускаю через мое приложение, он говорит:

когда я пытаюсь удалить таблицу, я получаю следующее сообщение:

В SP возникает проблема в следующем утверждении.

SELECT Start_Week=@WEEK_START_DATE , End_Week=@WEEK_END_DATE INTO #WeekList

Вместо этого попробуйте это, это может сработать.

INSERT INTO #WeekList SELECT Start_Week=@WEEK_START_DATE , End_Week=@WEEK_END_DATE

Вы можете #YourTable временную таблицу #YourTable с помощью этого кода:

if exists (select * from tempdb.sys.tables where name like '#YourTable%') drop table #YourTable

Лучше всего это сделать, прежде чем запускать insert into для создания таблицы.

В середине кода у вас есть:

select ... into #WeekList

Это попытается создать новую временную таблицу с именем #WeekList, которую вы уже создали, используя оператор CREATE TABLE в верхней части proc

Если вы измените вставку на стиль

insert into #WeekList (columns) select ...

Тогда вы избавитесь от ошибки

– Проверить, существует ли он

IF OBJECT_ID('tempdb..#temptable') IS NOT NULL BEGIN drop table #temptable END

и, используя временную вставку таблицы, укажите имена столбцов внешне как

insert into #temptable(col1,col2..) values(1,2,..)

Используйте табличную переменную в таблице #Temp, это лучший вариант. Если вы хотите использовать таблицу #temp, тогда проверьте наличие таблицы #temp в базе данных Tempdb, тогда вы можете получить эту таблицу #temp или нет.

Единственное, что я могу видеть, что может намекнуть на то, что не так, есть недостаток BEGIN и END? Я использую это все время, но я всегда ставил BEGIN и END вокруг кода sprocs …

Чтобы проверить, существует ли временная таблица:

IF OBJECT_ID(N'tempdb..#yourTempTableName') IS NOT NULL DROP TABLE #yourTempTableName;

Обратите внимание, как упоминалось в других ответах, вы создали временную таблицу #WeekList только с одним столбцом, затем попытайтесь повторно создать временную таблицу, используя короткий SELECT ... INTO #Weeklist ; который в вашем случае вы выбираете два столбца, здесь возникает проблема. Я бы удалил инструкцию CREATE TABLE в начале вашего кода и просто использовал SELECT ... INTO .

Основная причина проблемы заключается в том, что временная таблица с тем же именем создается два раза в одной партии. Сначала оператор CREATE TABLE и второй оператор SELECT .. INTO. Согласно Microsoft BOL: «Если в одной хранимой процедуре или партии создается несколько временных таблиц, они должны иметь разные имена».

Это особенность по дизайну в соответствии с разъяснением в Microsoft ID ошибки 666430.

Для получения дополнительной информации см. Временную таблицу link -can-not-be-re-created

sqlserver.bilee.com

Удалить временную таблицу sql – Telegraph

Удалить временную таблицу sql

Удаление таблицы

=== Скачать файл ===

DROP TABLE (Transact-SQL)

Удалить временную таблицу

Регистрация Выслать повторно письмо для активации Что даёт регистрация на форуме? RU Системы, Сети, Технологии Базы данных Базы данных: Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе ' Базы данных: Убедительная просьба - соблюдать ' Правила форума ' и не пренебрегать ' Правильным оформлением своих тем '. Прежде, чем создавать тему, имеет смысл заглянуть в раздел ' Базы данных: FAQ ', возможно там уже есть ответ. Я знаю только то, что ничего не знаю. Цитата Временные таблицы Можно создавать локальные и глобальные временные таблицы. Локальные временные таблицы видимы только во время текущего сеанса, а глобальные — во всех сеансах. Временные таблицы не подлежат секционированию. CREATE TABLE MyTempTable cola INT PRIMARY KEY INSERT INTO MyTempTable VALUES 1. CREATE TABLE MyTempTable cola INT PRIMARY KEY. Проверка на существование таблица неверна. Она создается в базе tempdb и имеет несколько иное название, зависящее от контекста. Вот например в Interbase я видел отлиный отладцик, который пошпгово выполняет запрос и показывает результаты команд и переменных, ессть ли такая фича MSSQLServer? А подскажите пожалуйста, как отлаживать запросы на сервере с помощью VS ? Предыдущая тема Базы данных: Powered by Invision Power Board U v1. При втором запуске запроса пишет: Почему не удаляется временная таблица? Как удалить временную таблицу??? CREATE TABLE MyTempTable cola INT PRIMARY KEY INSERT INTO MyTempTable VALUES 1 Если в пределах одной хранимой процедуры или пакета создается более одной временной таблицы, им должны быть присвоены разные имена. Если локальная временная таблица создается хранимой процедурой или приложением, которые одновременно могут выполняться несколькими пользователями, Database Engine должно иметь возможность различать таблицы, созданные разными пользователями. Database Engine делает это путем внутреннего присоединения числового суффикса к имени каждой локальной временной таблицы. Полное имя временной таблицы, хранящееся в таблице sysobjects базы данных tempdb, состоит из имени таблицы, заданного инструкцией CREATE TABLE, и сформированного системой числового суффикса. Временные таблицы автоматически удаляются при выходе за пределы области определения, если не удалять их явно с помощью инструкции DROP TABLE: Локальная временная таблица, созданная хранимой процедурой, удаляется автоматически при завершении хранимой процедуры. К этой таблице могут обращаться любые вложенные хранимые процедуры, выполняемые хранимой процедурой, создавшей таблицу. Процесс, вызвавший хранимую процедуру, создавшую таблицу, к этой таблице обращаться не может. Все прочие локальные временные таблицы удаляются автоматически в конце текущего сеанса. Глобальные временные таблицы автоматически удаляются при завершении сеанса, создавшего таблицу, и прекращении обращения к ним всех прочих задач. Связь между задачей и таблицей поддерживается только на время выполнения отдельной инструкции Transact-SQL. Это означает, что глобальная временная таблица удаляется после выполнения последней инструкции языка Transact-SQL, активно обращавшейся к ней во время завершения создавшего таблицу сеанса. Локальная временная таблица, созданная хранимой процедурой или триггером, может иметь то же имя, что и временная таблица, созданная до вызова хранимой процедуры или триггера. Однако если запрос обращается к временной таблице и одновременно существует две таблицы с одинаковым именем, не определено, к какой из таблиц будет направлен запрос. Вложенные хранимые процедуры могут также создавать временные таблицы с тем же именем, что и временная таблица, созданная вызывающей хранимой процедурой. Однако для применения изменений к таблице, созданной во вложенной процедуре, эта таблица должна иметь ту же структуру с теми же именами столбцов, что и таблица, созданная в вызывающей процедуре. Это показано в следующем примере. Если во временной таблице указано ограничение FOREIGN KEY, инструкция возвращает предупредительное сообщение, указывающее на то, что ограничение было пропущено. При этом таблица создается без ограничений FOREIGN KEY. В ограничениях FOREIGN KEY обращение к временным таблицам недопустимо. Рекомендуется использовать вместо временных таблиц табличные переменные. Временные таблицы полезны в случаях, когда индексы должны быть заданы по ним явно, или когда значения таблицы должны быть видимы нескольким хранимым процедурам или функциям. В общем случае использование табличных переменных приводит к более эффективной обработке запросов. Временная таблица удалится по завершению. А прога которая выполняет этот запрос, соеденение не рвёт пока жива, а запрос выполняет по таймеру А если сделать её хранимой процедурой, то после выполнения запроса она останется на севере и её тоже нужно будет удалять. А в одном запросе это сделать не получится, я уже пробовал Используй для этого, например, Query Analyzer. Правой кнопкой щелкаешь на хранимке и выбираешь debug.

В страшной стране мы живем в россии

Правила пользования жилымии вспомогательными помещениями рб

Где отдохнутьв пензенской области недорого

Халязион нижнего века видео

Как сделать крем из рикотты для торта

Давление при климаксе сколько времени длится

Назовите авторские характеристики политики

Куриный суп с овощами

Каталог немецкой одежды бонприкс

Склонение личных местоимений испанский

Сиалор инструкция для детей до года

Лазерный нивелир леруа

Тестна психический портрет

Topic стихи шевченко о хохлах

Кру красноярск где находится

Платифиллина гидротартрат инструкция по применению в ампулах

Какие виды сайдинга бывают

Структура интегрированной группы

Как правильно уволиться после отпуска

Бирюк характеристика героя

telegra.ph