CREATE PROCEDURE [dbo].[dt_CreateRoomMessageTable] 
@tableName varchar(50)
asCREATE TABLE [@tableName] (
[fdFromUID] [int] NULL ,
[fdFromUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[fdToUID] [int] NULL ,
[fdToUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[fdSendTime] [datetime] NULL ,
[fdPrivate] [int] NULL ,
[fdMessage] [ntext] COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GOexec('CREATE  INDEX [index_ToUserID]   ON   ['+@tableName+']([fdToUID])   ON   [PRIMARY]')   
 GO 
如果去掉后面的创建索引代码,可以正常创建,加上索引的代码就提示说tableName未定义,怎么解决啊

解决方案 »

  1.   

    --需改为:
    CREATE PROCEDURE [dbo].[dt_CreateRoomMessageTable] 
    @tableName varchar(50)
    as
    exec('
    CREATE TABLE ['+@tableName+'] (
    [fdFromUID] [int] NULL ,
    [fdFromUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [fdToUID] [int] NULL ,
    [fdToUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [fdSendTime] [datetime] NULL ,
    [fdPrivate] [int] NULL ,
    [fdMessage] [ntext] COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
     CREATE  INDEX [index_ToUserID]   ON   ['+@tableName+']([fdToUID])   ON   [PRIMARY]') 
      
     GO
      

  2.   

    不能使用exec,应该用sp_executesql
      

  3.   

    WangZWang(先来)的正确。
    不能加GO!