Разбор временной таблицы - ошибка SQL - требуется пояснение - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть следующий код, который не может быть выполнен. Я не ищу обходной путь. Я хочу понять, что делает SQL и почему происходит сбой с ошибкой: «В базе данных уже есть объект с именем #t». Пожалуйста, не забудьте объяснить.

if object_id('tempdb.dbo.#t') is not null

drop table #t

GO

declare @i int = 0

if @i = 0

create table #t (col1 int)

else

create table #t (col1 int)

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Я предлагаю использовать разные имена для временных таблиц.

По крайней мере, если вам действительно нужно создать временную таблицу в IF и ELSE.

Или удалить и создать временную таблицу только один раз в начале, до IF.

К сожалению, компилятор запутывается из-за такой мелочи.
Когда T- Sql анализируется и оценивается, он игнорирует операторы потока управления, такие как IF.
Так что создание та же самая временная таблица рассматривается в той же области и оценивается как проблема с дублирующимся объектом.

Пример обходного пути:

declare @i int = 0

if @i = 0
 begin
   if object_id('tempdb..#t1') is not null
     drop table #t1;
   create table #t1 (col1 int);
 end
else
  begin
    if object_id('tempdb..#t2') is not null
       drop table #t2;
    create table #t2 (col1 int, col2 int);
  end
0 голосов
/ 11 февраля 2020
-checking Temp table is exists , if Exists then Drop the table
  IF OBJECT_ID('TEMPDB.DBO.#t') IS NOT NULL DROP TABLE #t

 --Declaring Variable @i and assigning value 0
   DECLARE @i int = 0
  --Checking @i = 0 or not
  IF @i = 0
  BEGIN
      -- if @i value is 0 
      CREATE TABLE #t (col1 int)

  END
  GO
  --checking Temp table is exists , if Exists then Drop the table

   IF OBJECT_ID('TEMPDB.DBO.#t') IS NOT NULL DROP TABLE #t
   --Declaring Variable @i and assigning value 1

    DECLARE @i int = 1 --  Checking @i = 1
  IF @i= 1
  BEGIN    
        -- if @i value is not 0 
         CREATE TABLE #t (col1 int)
  END
  GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...