Объяснение оператора T-SQL IF - PullRequest
2 голосов
/ 10 февраля 2012

Я действительно озадачен этим !! Я уверен, что это просто, но на самом деле не могу понять !!

DECLARE @jobid INT = 100
   IF (@JobID >= 0)
 BEGIN 
SELECT * into #tmp FROM Persons 
 end
    ELSE
 BEGIN
SELECT * into #tmp FROM Persons1 
 end

Выдает ошибку, что таблица #tmp уже существует! Почему это подтвердит оба утверждения!

Конечно, мой оригинальный запрос огромен и делает больше, но это пример, иллюстрирующий мою ошибку.

Кто-нибудь может объяснить, пожалуйста?

Таблицы #tmp там нет, даже если вы попытаетесь удалить ее или изменить имя, двигатель все равно проверяет оба утверждения!

Я использую 2008 R2.

Спасибо Jason

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

#tmp может быть уже создано в tempDB из предыдущих запусков вашего запроса.Если вы не используете #tmp где-либо в своем запросе до этого блока, вы можете сделать что-то вроде следующего до этого блока кода, чтобы убедиться, что он всегда готов к работе:

IF OBJECT_ID('tempDB..#tmp') IS NOT NULL
    DROP TABLE #tmp
2 голосов
/ 10 февраля 2012

Вы запускаете его через связанный сервер? или вы не удалили один из предыдущего запуска.

Попробуйте создать таблицу #tmp до оператора IF:

CREATE TABLE #tmp(fields...)

DECLARE @jobid INT = 100
IF (@JobID >= 0)
BEGIN 
  INSERT #tmp
  SELECT * FROM Persons 
end
ELSE
BEGIN
  INSERT #Tmp
  SELECT * FROM Persons1 
end

или удалить проверенного

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
  EXEC('DROP TABLE #tmp')
GO

DECLARE @jobid INT = 100
   IF (@JobID >= 0)
 BEGIN 
SELECT * into #tmp FROM Persons 
 end
    ELSE
 BEGIN
SELECT * into #tmp FROM Persons1 
 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...