如何向现有表中添加动态列

3

我可以帮您进行翻译。此文涉及编程方面,您有两个表格,第一个表格包含以下列:

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

第二个表格包含以下列:
id,Name,Chk1,chk2,Chk3

如果table1动态更新为'value '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

请检查我的答案是否正确。我会在更新您的过程脚本后更新我的答案。 - Ritesh Khatri
仅仅说“它不工作”是远远不够的。请告诉我们,当您执行该存储过程时发生了什么。 - Raj
3个回答

2

将此查询用作存储过程。

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

如果您对我的回答感到满意,请点赞。 - Ritesh Khatri
代码正在执行,但新列没有被添加。 - user2514925
你使用了QUOTENAME()函数,所以它创建了问题。移除QUOTENAME(),然后你就可以成功地得到结果。 - Ritesh Khatri
我已经声明了另一个变量,并在其中添加了“_COMPLETEDDATE”字符串。现在它可以正常工作了。谢谢。 - user2514925

0

试试这个:

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

-1

使用触发器如下:

CREATE TRIGGER AddDynamicColumn_to_table2  
ON Table1  
AFTER INSERT  
AS  
Exec ('ALTER TABLE Table2 ADD ' + (select name from inserted) + ' Varchar(10)')  
GO  

创建存储过程是关于为什么要使用触发器。 - Ritesh Khatri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接