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

Откуда:
Сообщений: 329
exec sp_rename не работает, видимо из-за того, что для exec создаётся новое подключение и он не видит временную таблицу?!
17 авг 16, 18:53    [19554047]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
=Сергей=,
sp_rename работает только с текущей БД, поэтому временные таблицы ей переименовать не удаётся.
17 авг 16, 19:02    [19554066]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
aleks2
Guest
exec tempdb..sp_rename
17 авг 16, 19:32    [19554126]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37051
Переименовать временную таблицу?... Мсье знает толк в извращениях.
17 авг 16, 20:32    [19554309]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
=Сергей=
exec sp_rename не работает
Потому что временные объекты переименовывать нельзя. Совсем.
17 авг 16, 22:10    [19554737]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
=Сергей=,

не смогу заснуть, откройте секрет, зачем??
17 авг 16, 22:29    [19554825]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
=Сергей=
exec sp_rename не работает
Потому что временные объекты переименовывать нельзя. Совсем.


sp_rename вообще занятная процедура

	--------------------------------------------------------------------------
	--------------------  PHASE 32:  Temporay Table Isssue -------------------
	--------------------------------------------------------------------------
	-- Disallow renaming object to or from a temp name (starts with #)
	if (@objtype = 'object' AND
		(substring(@newname,1,1) = N'#' OR
		substring(object_name(@objid),1,1) = N'#'))
	begin
		COMMIT TRANSACTION
		raiserror(15600,-1,-1, 'sys.sp_rename')
		return 1
	end

ps оказывается бывают ещё желания переименовать в #name... что движет этими людьми...
17 авг 16, 22:39    [19554866]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
TaPaK
invm
пропущено...
Потому что временные объекты переименовывать нельзя. Совсем.


sp_rename вообще занятная процедура

	--------------------------------------------------------------------------
	--------------------  PHASE 32:  Temporay Table Isssue -------------------
	--------------------------------------------------------------------------
	-- Disallow renaming object to or from a temp name (starts with #)
	if (@objtype = 'object' AND
		(substring(@newname,1,1) = N'#' OR
		substring(object_name(@objid),1,1) = N'#'))
	begin
		COMMIT TRANSACTION
		raiserror(15600,-1,-1, 'sys.sp_rename')
		return 1
	end

ps оказывается бывают ещё желания переименовать в #name... что движет этими людьми...


Например следование определенной религии. По моему мнению это больше касается концепции разработки, нежели здравого смысла (типа везде придерживаемся одного стиля). Сам так не пишу, но вот примеры объектов в БД, которые доводилось поддерживать.
+ Tables


dbo.[@Client.List]
dbo.[@Client.Address]
dbo.[@Finance.Period]


+ Procedure


dbo.[#Register$Client]
dbo.[#Salary$Calculate]
dbo.[#RobotDropper$KillClient]


+ View


dbo.[%Publlic.GetParameters]
dbo.[%Salary.Period]
18 авг 16, 09:07    [19555508]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
o-o
Guest
+
dbo.[@Client.List] : клиенты -- собаки
dbo.[@Client.Address] : и дома их собачьи
dbo.[@Finance.Period] : финансы -- тоже собаки

Procedure
dbo.[#Register$Client]: доллары зарегистрирую, самого за решетку
dbo.[#Salary$Calculate]: з/п в долларах, но пересчитывать тебе их за решеткой
dbo.[#RobotDropper$KillClient]: посаженных в первом пункте там же и прибьют, не свои так роботы

View
dbo.[%Publlic.GetParameters]: в перспективе проценты с публики
dbo.[%Salary.Period]: и с з/п проценты тоже. за период
18 авг 16, 09:22    [19555568]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
iljy
Member

Откуда:
Сообщений: 8711
gds
+ Procedure


dbo.[#Register$Client]
dbo.[#Salary$Calculate]
dbo.[#RobotDropper$KillClient]



Соглашение об именах может быть любым, мало ли какие за этим стоят причины. Но dbo.[#Register$Client] - это далеко не то же самое, что #name: dbo.[#Register$Client] не является именем временной таблицы и для него sp_rename сработает без проблем, так что пример несколько не в тему.
18 авг 16, 09:48    [19555663]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
iljy
Но dbo.[#Register$Client] - это далеко не то же самое, что #name: dbo.[#Register$Client] не является именем временной таблицы и для него sp_rename сработает без проблем, так что пример несколько не в тему.
С другой стороны, dbo.[#Register$Client] - это далеко не то же самое, что dbo.[[#Register$Client]]

И соответственно непонятно, как обратиться к такой процедуре? Как у вас это получилось?
18 авг 16, 12:02    [19556611]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4254
автор
Как переименовать ВРЕМЕННУЮ таблицу?


select *
into #new_table
from #old_table
drop table #old_table
18 авг 16, 12:08    [19556642]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37051
SQL2008
автор
Как переименовать ВРЕМЕННУЮ таблицу?


select *
into #new_table
from #old_table
drop table #old_table
И сразу минус индексы, констрейнты и т.п.
18 авг 16, 12:25    [19556739]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Гавриленко Сергей Алексеевич
SQL2008
select *
into #new_table
from #old_table
drop table #old_table

И сразу минус индексы, констрейнты и т.п.
Да, и ещё ресурсы на дублирование данных.

Но для костыльных задач сойдёт и так :-)
18 авг 16, 12:35    [19556800]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
так а смысл сего действия каков?
18 авг 16, 12:44    [19556862]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
o-o
Guest
TaPaK
так а смысл сего действия каков?

чтоб TaPaK второй день спать не мог
18 авг 16, 12:50    [19556916]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4254
TaPaK
так а смысл сего действия каков?

Чисто академический интерес.
18 авг 16, 12:55    [19556950]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
iljy
Member

Откуда:
Сообщений: 8711
alexeyvg
И соответственно непонятно, как обратиться к такой процедуре? Как у вас это получилось?


А в чем проблема?
use tempdb
go
create proc dbo.[#Register$Client1] as
go
exec dbo.[#Register$Client1] 
go
drop proc dbo.[#Register$Client1] 


Или я вопроса не понял?
18 авг 16, 13:50    [19557499]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
iljy
dbo.[#Register$Client] не является именем временной таблицы и для него sp_rename сработает без проблем
К сожалению, не сработает.
Код кривой в sp_rename - запрещено, если наименование начинается с #, временный это объект или нет роли не играет.
18 авг 16, 14:03    [19557674]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
iljy
Member

Откуда:
Сообщений: 8711
invm,

а проверить?

use tempdb
create table dbo."[#Register$Client]" (id int)

exec sp_rename '"[#Register$Client]"', '[#name]'
go
drop table dbo."[#name]"


Как раз речь о том, что в данном примере именование не начинается с #, а вовсе даже с [.
Создать невременный объект с именем, начинающимся с #, не получится (недопустимо правилами языка), и код в sp_rename как раз это блокирует (и вовсе он не кривой).
18 авг 16, 14:20    [19557877]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
iljy
alexeyvg
И соответственно непонятно, как обратиться к такой процедуре? Как у вас это получилось?


А в чем проблема?
use tempdb
go
create proc dbo.[#Register$Client1] as
go
exec dbo.[#Register$Client1] 
go
drop proc dbo.[#Register$Client1] 

Или я вопроса не понял?
Проблема в том, что это создание временной таблицы и обращение к ней, в tempdb.
А речь была о постоянной, в пользовательской базе.
Вы же сами писали:
iljy
Но dbo.[#Register$Client] - это далеко не то же самое, что #name


То есть если мы создали постоянную таблицу dbo.[Register$Client], а потом переименовали её в таблицу dbo.[#Register$Client], то она не станет временной, и обратиться к ней будет нельзя (и вообще ничего сделать нельзя, даже удалить или переименовать обратно)
18 авг 16, 14:26    [19557961]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
iljy
а проверить?

use tempdb
create table dbo."[#Register$Client]" (id int)

exec sp_rename '"[#Register$Client]"', '[#name]'
go
drop table dbo."[#name]"
А, вот с двойными кавычками я не пробовал, спасибо, только сейчас заметил пост :-)
18 авг 16, 14:26    [19557973]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
iljy
Member

Откуда:
Сообщений: 8711
alexeyvg,

не за что :) практических применений подобным извращениям я не вижу, но мало ли что
18 авг 16, 14:34    [19558080]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o
TaPaK
так а смысл сего действия каков?

чтоб TaPaK второй день спать не мог

конечно, утрата покоя и сна... зачем же переименовывать временную таблицу то
18 авг 16, 14:36    [19558096]     Ответить | Цитировать Сообщить модератору
 Re: Как переименовать ВРЕМЕННУЮ таблицу?  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
iljy
а проверить?
Так проверено.
Вы же первоначально написали dbo.[#Register$Client], что и воспринимается как обычное квотированное имя :)
18 авг 16, 14:39    [19558121]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить