【问题标题】:How to add dynamic column to an existing table如何将动态列添加到现有表
【发布时间】:2014-06-14 22:25:15
【问题描述】:

我有 2 个表,第一个表包含以下列,

 id code    Name
 1  c1  chk1
 2  c2  chk2
 3  c3  chk3

第二个表格包含以下列,

id,Name,Chk1,chk2,Chk3

如果 table1 动态更新值为 '4,'c4','ch4',我必须将列 'Chk4' 添加到 table2。如何编写程序来执行此操作?

我已经尝试了以下过程,但它不能正常工作。

         create proc Add_Check
          as 
          begin
          declare @Column varchar(50)
          declare @query varchar(255)
          declare @query1 varchar(255)
          set @Column= (select top 1 QUOTENAME(Name)
            from table1 where id=(Select MAX id) from table1))
          if exists(select 1 from table1
         where Name=@Column) 
         begin
         set @query = 'alter table table2 add ' + @Column + ' Varchar (50)'
         set @query1 = 'alter table table2 add ' + @Column + '_CompletedDate Varchar (50)'
         exec(@query)
         end
         end

【问题讨论】:

  • 现在检查我的答案。更新您的程序脚本后,我会更新我的答案。
  • 它不工作还不够。请告诉我们执行 SP 时发生了什么

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012


【解决方案1】:

将此查询用作过程。

CREATE PROC ADD_CHECK
AS 
BEGIN
    DECLARE @COLUMN VARCHAR(50)
    DECLARE @QUERY VARCHAR(255)
    DECLARE @QUERY1 VARCHAR(255)

    SET @COLUMN= (SELECT TOP 1 NAME FROM TABLE1 WHERE ID=(SELECT MAX (ID)     FROM TABLE1))

    IF EXISTS(SELECT 1 FROM TABLE1 WHERE NAME=@COLUMN) 
    BEGIN
        SET @QUERY = 'ALTER TABLE TABLE2 ADD ' + @COLUMN + ' VARCHAR (50)'
        SET @QUERY1 = 'ALTER TABLE TABLE2 ADD ' + @COLUMN + '_COMPLETEDDATE VARCHAR     (50)'
        EXEC(@QUERY)
    END
END

【讨论】:

  • 如果您对我的回答满意,请点赞我的回答
  • 它正在执行,但没有添加新列
  • 您使用 QUOTENAME() 函数,这就是为什么它会创建问题。删除 QUOTENAME() 比你得到成功的结果
  • 我已经声明了另一个变量并在其中添加了“_COMPLETEDDATE”字符串。它现在工作正常。谢谢..
【解决方案2】:

试试这个:

CREATE PROCEDURE <procedurename>
AS 
BEGIN    
    DECLARE @COLUMN varchar(10), @SQL Varchar(100);
    SELECT @COLUMN = Name FROM Table1 
    WHERE id = (SELECT MAX(id) FROM Table1)
                IF NOT EXISTS(
                              SELECT COLUMN_NAME 
                              FROM INFORMATION_SCHEMA.COLUMNS
                              WHERE TABLE_NAME = 'Table2' 
                              AND COLUMN_NAME = @COLUMN
                             )
                 BEGIN
                   SELECT @SQL = 
                          'ALTER TABLE Table2 ADD '
                           +@COLUMN+' varchar(10),'
                           +@COLUMN+'_CompletedDate varchar(50)'
                   EXECUTE (@SQL)
                 END
END

【讨论】:

    【解决方案3】:

    使用触发器如下:

    创建触发器 AddDynamicColumn_to_table2
    上表1
    插入后
    作为
    Exec ('ALTER TABLE Table2 ADD ' + (从插入中选择名称) + ' Varchar(10)')
    去吧

    【讨论】:

    • 它是关于创建过程而不是为什么使用触发。
    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多