Подтвердить что ты не робот

Временная таблица на сервере SQL, вызывающая "Уже есть объект с именем" error "

У меня есть следующая проблема в SQL Server, у меня есть код, который выглядит следующим образом:

DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))  

SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN  FROM TBL_PEOPLE

Когда я это сделаю, я получаю сообщение об ошибке "В базе данных уже есть объект с именем #TMPGUARDIAN". Может кто-нибудь сказать мне, почему я получаю эту ошибку?

4b9b3361

Ответ 1

Вы отбрасываете его, затем создаете его, а затем пытаетесь создать его снова, используя SELECT INTO. Изменить на:

DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))  

INSERT INTO #TMPGUARDIAN 
SELECT LAST_NAME,FRST_NAME  
FROM TBL_PEOPLE

В MS SQL Server вы можете создать таблицу без оператора CREATE TABLE с помощью SELECT INTO

Ответ 2

Я обычно помещаю эти строки в начало моей хранимой процедуры, а затем в конце.

Это проверка "существует" для таблиц #temp.

IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
begin
        drop table #MyCoolTempTable
end

Ответ 3

Вы должны изменить запрос, подобный этому

CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))  

INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME)
SELECT LAST_NAME,FRST_NAME  FROM TBL_PEOPLE

- Сделать последний сеанс для очистки всех временных таблиц. всегда капля в конце. В вашем случае иногда может произойти ошибка, если таблица не существует, а вы пытаетесь удалить.

DROP TABLE #TMPGUARDIAN

Избегайте использования вставки в Потому что если вы используете вставку, то в будущем, если вы хотите изменить временную таблицу, добавив новый столбец, который может быть заполнен после некоторого процесса (а не со вставкой). В то время вам нужно переделать и спроектировать его таким же образом.

Использовать переменную таблицы http://odetocode.com/articles/365.aspx

declare @userData TABLE(
 LAST_NAME NVARCHAR(30),
    FRST_NAME NVARCHAR(30)
)

<сильные > Преимущества Нет необходимости в операторах Drop, так как это будет похоже на переменные. Область действия заканчивается сразу же после выполнения.

Ответ 4

Несколько раз вы можете совершать глупые ошибки, такие как запись запроса на вставку в тот же .sql файл (в той же рабочей области/вкладке), поэтому, как только вы выполняете запрос на вставку, где ваш запрос на создание был написан чуть выше и уже выполнен, он снова будет начните выполнение вместе с запросом на вставку.

Вот почему мы получаем имя объекта (имя таблицы) уже, так как оно выполняется во второй раз.

Итак, перейдите на отдельную вкладку, чтобы записать вставку или удаление или любые другие запросы, которые вы собираетесь выполнить.

Или используйте строки комментариев, предшествующие всем запросам, в том же рабочем пространстве, что и

CREATE -- …
-- Insert query
INSERT INTO -- …

Ответ 5

Пока OP обсуждал таблицы, если рассматриваемый объект является хранимой процедурой, убедитесь, что вы используете функцию "alter":

ALTER PROCEDURE

Если вы вставляете код, вам может потребоваться заменить "create" на "alter"... это только что произошло со мной и разочаровывает, поэтому я надеюсь, что это произойдет с кем-то другим.