CREATE PROCEDURE [CreateMyTable] 
(@LogTableName [varchar](32))
AS
declare @v_sql varchar(2000)
if exists (select * from sysobjects where id = object_id(N'[dbo].['+ @LogTableName + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
set @v_sql = ' drop table ' + @LogTableName 
exec (@v_sql)
GO
set @v_sql = 'CREATE TABLE ' + @LogTableName 
+'('
+'[SerialNo] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,'
+'[OpTime] [datetime] NOT NULL ,'
+'[OpInfo] [varchar] (50) NOT NULL ,'
+'[OpDesc] [varchar] (100) NULL '
+') ON [PRIMARY]'
exec (@v_sql)GO

解决方案 »

  1.   

    我按你的代码写了,可为什么老有错误说:“must declare variable @LogTableName, must declare variable @v_sql.”
      

  2.   

    好象不能用 “GO”.我把“GO”去掉后就没语法错误了。不知为什么?
      

  3.   

    每个go相当于执行完一段sql语句段,在这个语句块中设置的所有变量都会释放,所以在下一块sql语句块执行时会报错。
      

  4.   

    那就加上这些
    CREATE PROCEDURE [CreateMyTable] @LogTableName [varchar](32)
    AS
    begin
    declare @v_sql varchar(2000)
    if exists (select * from sysobjects where id = object_id(N'[dbo].['+ @LogTableName + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    set @v_sql = ' drop table ' + @LogTableName 
    exec (@v_sql)
    set @v_sql = 'CREATE TABLE ' + @LogTableName 
    +'('
    +'[SerialNo] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,'
    +'[OpTime] [datetime] NOT NULL ,'
    +'[OpInfo] [varchar] (50) NOT NULL ,'
    +'[OpDesc] [varchar] (100) NULL '
    +') ON [PRIMARY]'
    exec (@v_sql)
    end