更改表或视图的名字以及其所属的架构

山寨DBA 2014-02-20 11:11:00
今天面试,遇到一个恶心的题目,小弟是不会了,请大神们不吝赐教,题目如下:
假设有若干个表或试图要改名以及更改框架。请写出主要的步骤及SQL语句及需要注意到的事项。
如下图表结构:
...全文
363 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
直面人生 2014-02-21
  • 打赏
  • 举报
回复
引用 6 楼 hwhmh2010 的回复:
多谢上述众大神的回复,非常感谢。 这是我昨天的面试题,恶心死我了,呵呵,谢谢大家,大家的方法,我会逐一尝试。 哎,出这个题的人,我也不知道他在想什么,其实我觉得这种变更对数据库的影响应该是比较恶劣的。嘿嘿
国人面试都喜欢问点比较冷门的点,跟考试似的!
jorkin_me 2014-02-21
  • 打赏
  • 举报
回复
的确恶心,这种一般都用不到,就算用到了,随便查查手册就能搞定的东西还要来做面试题,真是居心叵测啊。。
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
这种题目确实比较恶心,估计我也做不对。。。 不过查一下资料,就可以做出来的,这种题目不难,但出题者倒是很恶心
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
试试这个:

--创建e_A表
select * into dbo.e_A
from sys.objects


--1.创建schema
create schema exp

--2.把dbo下面的对象e_A,移到exp下面
alter schema exp transfer dbo.e_A

--3.把exp下面的e_A修改为 chk_A
exec sp_rename 'exp.e_A','chk_A'


--查询
select *
from exp.chk_A

LongRui888 2014-02-20
  • 打赏
  • 举报
回复
我觉得最简单的方法就是: 1、先创建一个新的架构:exp 2、 select * into exp.CHK_A from dbo.e_A 3、drop table dbo.e_A
Yole 2014-02-20
  • 打赏
  • 举报
回复
exec sp_rename '原表名','你要改和名字' 要是数据不多也可以这要改 select * into 你要改的名字 from 原表 go dorp table 原表
  • 打赏
  • 举报
回复
sql 2005 修改表架构名字 或 修改存储过程的架构
/**文章由www.ccxcn.com提供,在此表示感谢**/

sql 2005 修改表架构名字 或 修改存储过程的架构
1。先说说如何在SQL 2005中批量修改存储过程的架构。

执行以下SQL,将执行结果拷贝出来,批量执行既可。
SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + p.NameFROM sys.Procedures p INNER JOIN sys.Schemas s on p.schema_id = s.schema_idWHERE s.Name = 'old schema name'
2。再说说如何在SQL 2005中批量修改表的架构。

执行以下SQL,将执行结果拷贝出来,批量执行既可。

declare @name sysnamedeclare csr1 cursorforselect TABLE_NAME from INFORMATION_SCHEMA.TABLESopen csr1FETCH NEXT FROM csr1 INTO @namewhile (@@FETCH_STATUS=0)BEGINSET @name='旧的架构名称.' + @nameprint 'ALTER SCHEMA dbo TRANSFER ' + @namefetch next from csr1 into @nameENDCLOSE csr1DEALLOCATE csr1
‍
sql server 2000
exec sp_changeobjectowner '[bbsdb].[dv_style]',[dbo]
更改当前数据库中对象的所有者备份、恢复数据库时,往往会出现所有者是原来的用户,这样当你在新的系统中使用 时,会出现表名无效的错误提示,而加入原来的用户名,又会出现用户已经存在的错误,
所以最好的方法就是修改成dbo:
怎么样把sql server 2000的用户表的所有者,改成dbo,而不是用户名。
(附修改存储过程的方法,在查询器中执行: 
EXEC sp_changeobjectowner 'usera.hishop_creatorder', 'dbo'),就把 usera的存储过程改为dbo所有了。
可以使用 sp_changedbowner 更改数据库的所有者。
方法一:右键点击该表-》设计表,在上面的一排小图标中,点最后一个“条件约束”,点“表”页,在里面更改所有者。(若没有条件约束的小图标,可以点右键,能看到一个“check约束”的选项)
方法二:利用脚本直接执行,用系统帐号或者超户登陆到该数据库,然后执行下面语句:
sp_configure 'allow updates','1' 
go 
reconfigure with override 
go 
update sysobjects set uid=1 where uid<>1 
go 
sp_configure 'allow updates','0' 
go 
reconfigure with override
第二种方法只能使用一次,第二次使用会出错。
sql server 2005
1。先说说如何在SQL 2005中批量修改存储过程的架构。
执行以下SQL,将执行结果拷贝出来,批量执行既可。
SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + p.Name
FROM sys.Procedures p INNER JOIN sys.Schemas s on p.schema_id = s.schema_id
WHERE s.Name = '旧的架构名称'
2。再说说如何在SQL 2005中批量修改表的架构。
执行以下SQL,将执行结果拷贝出来,批量执行既可。
declare @name sysname 
declare csr1 cursor 
for 
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where table_schema='dbo' 
open csr1
FETCH NEXT FROM csr1 INTO @name 
while (@@FETCH_STATUS=0) 
BEGIN 
SET @name='旧的架构名称.' + @name
print 'ALTER SCHEMA dbo TRANSFER ' + @name 
fetch next from csr1 into @name 
END 
CLOSE csr1 
DEALLOCATE csr1

修改表用下面
declare @name sysname
declare csr1 cursor
for
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
open csr1

FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
BEGIN
SET @name='gctq123.' + @name

print 'ALTER SCHEMA dbo TRANSFER ' + @name
fetch next from csr1 into @name
END
CLOSE csr1
DEALLOCATE csr1
--说句实话,能问这样问题的面试官也不是什么好鸟,跟了这样的人没出路
唐诗三百首 2014-02-20
  • 打赏
  • 举报
回复

-- 改名
sp_rename '[原表名]','[新表名]'

-- 更改框架
sp_changeobjectowner '[表名]','[架构名]'
山寨DBA 2014-02-20
  • 打赏
  • 举报
回复
多谢上述众大神的回复,非常感谢。 这是我昨天的面试题,恶心死我了,呵呵,谢谢大家,大家的方法,我会逐一尝试。 哎,出这个题的人,我也不知道他在想什么,其实我觉得这种变更对数据库的影响应该是比较恶劣的。嘿嘿

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧