2014-02-17 124 views
0

我使用sp_rename在切换表名,下面是我的查询重命名表

exec sp_rename 'dbo.People_Daily' , 'TEMP' 
exec sp_rename 'dbo.People_Future', 'People_Daily' 
exec sp_rename 'TEMP', 'dbo.People_Future' 

我的问题是,如果我使用TEMP字执行与不同的表名并联同一查询,因为即时通讯这两个查询,是否有可能在人们的TEMP将被地址?使用,我该怎么做才能避免这种情况,是否有任何自动生成的词来取代TEMP?

exec sp_rename 'dbo.Address_Daily' , 'TEMP' 
exec sp_rename 'dbo.Addresse_Future', 'Address_Daily' 
exec sp_rename 'TEMP', 'dbo.Address_Future' 

谢谢!

+1

那么,为什么你使用'TEMP'呢?为什么不为每个表使用不同的名称,例如。 'dbo.x_Address_Daily'或类似的东西?另外,如果你在业务逻辑中使用'sp_rename',而不是在部署DDL中,你可能会做一些非常错误的事情:) – Luaan

回答

3

如果批次并行运行,使用TEMP会发生碰撞。但是你可以使用TEMP作为后缀,以现有的表名:

exec sp_rename 'dbo.People_Daily' , 'dbo.People_Daily_TEMP' 
exec sp_rename 'dbo.People_Future', 'People_Daily' 
exec sp_rename 'dbo.People_Daily_TEMP', 'dbo.People_Future' 

exec sp_rename 'dbo.Address_Daily' , 'dbo.Address_Daily_TEMP' 
exec sp_rename 'dbo.Addresse_Future', 'Address_Daily' 
exec sp_rename 'dbo.Address_Daily_TEMP', 'dbo.Address_Future' 

那么你的批次不会发生碰撞。

+0

我为每个表使用变量,这个查询将在一个shell包中执行所以它可能不同的配置同时使用,所以我认为这很好,我只是使用@User :: strTablename +“_TEMP” – Rommel20