SELECT 'EXEC SP_RENAME  ''' +NAME  +''',  '''+REPLACE(NAME,'db16320.','')+''''FROM SYSOBJECTS WHERE TYPE='U'

解决方案 »

  1.   

    你所说的前缀具体是什么样的?db16320.tb   --如果是这种就没影响
    db16320_tb
    db16320tb
      

  2.   

    架构是sql2005中的,所以你到2000下才会不在。不能用sp_rename来修改。 因为架构名并不包括在表名中。
    确认你那个是架构还是表名前辍,很简单:(1) 展开库,架构,看有没有你所谓的前辍。 如果有,则可能是架构
    (2) 右击表,生成脚本,看生成的语句如果是 create table [a].[b] 这样,无疑是架构。
    如果是 create table [a.b] 或者 create table 架构.[a.b] 那么 a无疑是前辍。
    你先确定你的是架构还是前辍,再给你解决办法。
      

  3.   

    USE test
    GO
    --创建测试架构
    CREATE SCHEMA [fcSCHEMA] AUTHORIZATION [dbo]
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'test' ,@level0type=N'SCHEMA', @level0name=N'fcSCHEMA'
    GO--创建一个测试架构下的表
    CREATE TABLE fcSCHEMA.testTB(id INT)
    GO
    /*
    SELECT * FROM testTB
    消息 208,级别 16,状态 1,第 1 行
    对象名  'testTB' 无效。
    */
    GO
    SELECT * FROM fcSCHEMA.testTB
    /*
    (0 行受影响)
    */
    GO
    --将testTB的架构更改为dbo
    ALTER SCHEMA dbo TRANSFER fcSCHEMA.testTB
    GO
    SELECT * FROM dbo.testTB
    GO
    DROP TABLE dbo.testTB
    GO
    DROP SCHEMA fcSCHEMA
    GO
      

  4.   

    sql2005里每个表都有架构的,只是通常情况下,建表不指定架构,会用默认架构dbo(当然,也看建表用户的一些属性)
    所以通常,以为没有架构 ,实际上是有的,如果默认架构,只是省掉了。如下,
    USE test
    GO
    --创建测试架构
    CREATE SCHEMA [fcSCHEMA] AUTHORIZATION [dbo]
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'test' ,@level0type=N'SCHEMA', @level0name=N'fcSCHEMA'
    GO--创建一个测试架构下的表
    CREATE TABLE fcSCHEMA.testTB(id INT)
    GOSELECT * FROM testTB  -- 这里省了就报错
    /*消息 208,级别 16,状态 1,第 1 行
    对象名  'testTB' 无效。
    */
    GO
    SELECT * FROM fcSCHEMA.testTB
    /*
    (0 行受影响)
    */
    GO
    --将testTB的架构更改为dbo
    ALTER SCHEMA dbo TRANSFER fcSCHEMA.testTB
    GO
    SELECT * FROM dbo.testTB
    SELECT * FROM testTB  --把架构名省了
    GO
    DROP TABLE dbo.testTB
    GO
    DROP SCHEMA fcSCHEMA
    GO