请各位帮忙,分不多了!!
  我想给数据库表中动态添加列(动态生成字段),但是我要动态生成的列的 名字,类型,和长度都是参数(变量),请问怎么样添加。
  用alter table tab add @x……
  cdm.parameters("@x",x);
  不对,
请帮一下!!

解决方案 »

  1.   

    好象有人问过。
    我有个笨思路。但是存储过程写起来可能很长。
    用一个表(T_Field)存放要建立的表的字段,设计如下:
    FieldID  int (1,1) primary key not null 
    FieldName char(50)  --放字段名
    FieldType char(10)  -- 放字段类型从上表里取出数据集,并把数据字段为 FieldName的合为一个长字符串,如("s_ID,stuName,tName"),FieldType也合为一个长字符串。传入存储过程里。在存储过程里,把字符串根据逗号划分为N个字符,如果表不存在,先创建,根据对应的FieldType 修改表(ALTER TABLE里有 add ,drop等方法)如:
    UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL
    ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
    A. 更改表以添加新列
    下例添加一个允许空值的列,而且没有通过 DEFAULT 定义提供值。各行的新列中的值将为 NULL。CREATE TABLE doc_exa ( column_a INT) 
    GO
    ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL
    GO
    EXEC sp_help doc_exa
    GO
    DROP TABLE doc_exa
    GOB. 更改表以除去列
    下例修改表以删除一列。CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL) 
    GO
    ALTER TABLE doc_exb DROP COLUMN column_b
    GO
    EXEC sp_help doc_exb
    GO
    DROP TABLE doc_exb
    GOC. 更改表以添加具有约束的列
    下例向表中添加具有 UNIQUE 约束的新列。 CREATE TABLE doc_exc ( column_a INT) 
    GO
    ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL 
       CONSTRAINT exb_unique UNIQUE
    GO
    EXEC sp_help doc_exc
    GO
    DROP TABLE doc_exc
    GO存储过程
        …………
      

  2.   

    the parameter approach doesn't work with ALTER TABLE, just do (beware of sql injection attack)string s = "alter table tab add {0} {1} {2}"strsql = string.Format(s,columnname,datatype,size)cmd.ExecuteNonQuery();strsql = string.Format(s,columnname2,datatype2,size2)cmd.ExecuteNonQuery();
      

  3.   

    谢谢,我用了saucer(思归)的方法
      

  4.   

    谢谢,我用了saucer(思归)的方法