如下语句,在Delphi中为某表动态增加一列。
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.Add('Alter Table :tb Add :col nvarchar(50) null');
        parameters.ParamByName('tb').Value :=tablename;
        parameters.ParamByName('col').Value :=columnname;
        ExecSQL;
     end;执行时,提示“在‘@P1’附近有语法错误”,搞怪了,哪里来的“@P1”啊在查询分析器中执行'Alter Table tablename Add columnname nvarchar(50) null'时成功可是当把它放到存储过程中是就会出现错误。跟在Delphi中一样,是“在@tablename附近有语法错误”CREATE PROCEDURE Pro_AddColumn 
@tablename as varchar(50),
@colname as varchar(50) 
 AS
Alter Table @tablename Add @colname nvarchar(50) null
GO哪位大侠帮帮忙看看到底是什么原因啊???

解决方案 »

  1.   


    CREATE PROCEDURE Pro_AddColumn 
    @tablename as varchar(50), 
    @colname as varchar(50) 
    AS 
    Alter Table @tablename Add @colname nvarchar(50) null 
    --在SQL中你不能用上面的语句进行执行,必须用到动态语句,用下面的语句
    /*
    declare @S varchar(500)
    set @S = 'Alter Table ' + @tableName + ' add ' + @ColName + ' nvarchar(50) null '
    */
    GO delphi报错也是因为这个问题
      

  2.   

    忘了告诉你执行这条语句了,在给@S赋值后,执行时用
    exec(@S)
      

  3.   

    存储过程中用动态SQLexec('Alter Table @tablename Add @colname nvarchar(50) null')试试