SQL Server: указана временная таблица, но ее нет в INFORMATION_SCHEMA - PullRequest
0 голосов
/ 16 октября 2019

Я использую следующее для проверки и создания таблицы:

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'tempdb' AND TABLE_NAME LIKE '#tmp_items%')
    CREATE TABLE #tmp_items 
    (
        id               INT IDENTITY(1,1),
        inv_mast_uid     INT DEFAULT NULL,
        src_invoice      BIT DEFAULT NULL,
        src_invoice_date DATETIME DEFAULT NULL,
        src_order        BIT DEFAULT NULL,
        src_order_date   DATETIME DEFAULT NULL
    )
ELSE
    TRUNCATE TABLE #tmp_items

Я получаю следующую ошибку:

Уже существует объект с именем '#tmp_items'в базе данных.

Если бы она существовала, она должна была бы обрезать таблицу ....

Когда я смотрю на INFORMATION_SCHEMA, я ничего не вижу:

SELECT DISTINCT TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES

Возвращает:

ssb
UTIL
mbl
DataSync
dbo

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%tmp_items%'

Ничего не возвращает.

Это не имеет смысла, и я в растерянности ... Я даже отключился отсервер (который должен был очистить временные таблицы) и переподключился и все равно получил ту же ошибку.

Я что-то упустил?

1 Ответ

3 голосов
/ 16 октября 2019

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

IF OBJECT_ID('tempdb..#tmp_items%') is not null
    drop table #tmp_items

CREATE TABLE #tmp_items 
(
    id                  int         identity(1,1),
    inv_mast_uid        int         DEFAULT NULL,
    src_invoice         bit         DEFAULT NULL,
    src_invoice_date    datetime    DEFAULT NULL,
    src_order           bit         DEFAULT NULL,
    src_order_date      datetime    DEFAULT NULL
)
...