ALTER PROCEDURE [dbo].[表名] @uid int ,
@userid int,
@timedate varchar (100) AS
BEGIN
SET NOCOUNT ON;
if exists ( select * from sysobjects where id = object_id(N'@timedate') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
INSERT INTO @timedate (uid,userid) VALUES(@uid,@userid)
end
else
begin
select * into @timedate from Useraction1111 where 1=0
INSERT INTO @timedate(uid,userid) VALUES (@uid,@userid)
end

select @@ERROR as ErrorId 
END要做一个自动创建表的存储过程,@timedate这个是传进去的表名。
要先判断有没有这个表,有的话就不创建,直接添加数据。
没有的话就先创建表,在添加数据。
你给位老大多指点啊!

解决方案 »

  1.   

    表名或者字段名为变量的时候  用动态SQL
      

  2.   


    ALTER PROCEDURE [dbo].[表名] @uid int ,
    @userid int,
    @timedate varchar (100) AS
    BEGIN
    SET NOCOUNT ON;
    if exists ( select * from sysobjects where id = object_id(@timedate) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    begin
    EXEC('INSERT INTO '+@timedate+'( (uid,userid) VALUES('+@uid+','+@userid+')')
    end
    else
    begin
    EXEC('select * into '+@timedate+' from Useraction1111 where 1=0;')
    EXEC('INSERT INTO '+@timedate+'(uid,userid) VALUES ('+@uid+','+@userid')')
    end

    select @@ERROR as ErrorId 
    END
      

  3.   

    少了個"+"號
    CREATE PROCEDURE [dbo].[表名] 
    @uid        int ,
    @userid        int,
    @timedate varchar (100)    AS
    BEGIN
        SET NOCOUNT ON;
        if exists ( select * from sysobjects where id = object_id(@timedate) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
            begin
            EXEC('INSERT INTO '+@timedate+'( (uid,userid) VALUES('+@uid+','+@userid+')')
            end
        else
            begin
            EXEC('select * into '+@timedate+' from Useraction1111 where 1=0;')
            EXEC('INSERT INTO '+@timedate+'(uid,userid) VALUES ('+@uid+','+@userid+')')
            end
        
        select @@ERROR as ErrorId 
    END