今天面试,遇到一个恶心的题目,小弟是不会了,请大神们不吝赐教,题目如下:
假设有若干个表或试图要改名以及更改框架。请写出主要的步骤及SQL语句及需要注意到的事项。
如下图表结构:

------解决方案--------------------
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
--说句实话,能问这样问题的面试官也不是什么好鸟,跟了这样的人没出路
------解决方案--------------------
exec sp_rename '原表名','你要改和名字'
要是数据不多也可以这要改
select * into 你要改的名字
from 原表
go
dorp table 原表
------解决方案--------------------
我觉得最简单的方法就是:
1、先创建一个新的架构:exp
2、
select * into exp.CHK_A
from dbo.e_A
3、drop table dbo.e_A
------解决方案--------------------
试试这个:
--创建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
------解决方案--------------------
这种题目确实比较恶心,估计我也做不对。。。
不过查一下资料,就可以做出来的,这种题目不难,但出题者倒是很恶心

------解决方案--------------------
-- 改名
sp_rename '[原表名]','[新表名]'
-- 更改框架
sp_changeobjectowner '[表名]','[架构名]'
------解决方案--------------------
的确恶心,这种一般都用不到,就算用到了,随便查查手册就能搞定的东西还要来做面试题,真是居心叵测啊。。
------解决方案--------------------
国人面试都喜欢问点比较冷门的点,跟考试似的!