Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Особенность работы SWITCH  [new]
Mairos
Member

Откуда:
Сообщений: 555
Добрый день, коллеги!
Проверял работу на MS SQL 2012 и 2014.
В чём суть проблемы.
Конструкция вида
use tempdb
go 

create table dbo.t1(a int null)
go

create table #t1(a int null)
go

insert into #t1(a)
select 1 as a
union
select 2
union
select 3

alter table dbo.#t1 switch to dbo.t1

.. работает отлично, а когда вместо "tempdb" любая другая из существующих схем, то получаю ошибку
при попытке выполнения SWITCH - "Cannot find the object "dbo.t1" because it does not exist or you do not have permissions."

У меня права "public" и "sysadmin". Подскажите, пожалуйста, как эту "заковыку" обойти?
17 фев 16, 11:16    [18828141]     Ответить | Цитировать Сообщить модератору
 Re: Особенность работы SWITCH  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mairos
Подскажите, пожалуйста, как эту "заковыку" обойти?

Вы хотите выполнять alter table для таблицы одной базе в контексте другой базы что ли ?
17 фев 16, 11:19    [18828168]     Ответить | Цитировать Сообщить модератору
 Re: Особенность работы SWITCH  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
USE [master]
GO

IF OBJECT_ID('dbo.t1', 'U') IS NOT NULL
    DROP TABLE dbo.t1
GO
IF OBJECT_ID('tempdb..#t1', 'U') IS NOT NULL
    DROP TABLE #t1
GO


CREATE TABLE dbo.t1 (a INT NULL)
GO
CREATE TABLE #t1 (a INT NULL)
GO

INSERT INTO #t1 (a)
VALUES (1), (2), (3)

ALTER TABLE dbo.#t1 SWITCH TO dbo.t1

Msg 4905, Level 16, State 1, Line 20
ALTER TABLE SWITCH statement failed. The target table 'tempdb.dbo.t1' must be empty.

Потому что эту конструкцию можно использовать только в рамках одной БД. Помним, что все временные таблицы живут в tempdb.
17 фев 16, 11:21    [18828176]     Ответить | Цитировать Сообщить модератору
 Re: Особенность работы SWITCH  [new]
Mairos
Member

Откуда:
Сообщений: 555
Glory, получается именно так. Я в одной рабочей хранимке на сервере такую конструкцию видел и она работает каждую ночь.
17 фев 16, 11:32    [18828278]     Ответить | Цитировать Сообщить модератору
 Re: Особенность работы SWITCH  [new]
Mairos
Member

Откуда:
Сообщений: 555
Glory, пардон.. В хранимке это в одной базе действительно, там времянки нет. Вопрос закрыт.
17 фев 16, 11:34    [18828300]     Ответить | Цитировать Сообщить модератору
 Re: Особенность работы SWITCH  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOL - ALTER TABLE

If reassigning one partition's data to form a single table, the target table must already be created and it must be empty. Both the source table or partition, and the target table or partition, must reside in the same filegroup. The corresponding indexes, or index partitions, must also reside in the same filegroup. Many additional restrictions apply to switching partitions. For more information, see Transferring Data Efficiently by Using Partition Switching. table and target_table cannot be the same. target_table can be a multi-part identifier.
17 фев 16, 11:45    [18828401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить