如何使用过程在sql server中添加列并更新列

如何使用过程在sql server中添加列并更新列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我创建了一个名为test_-exam的表 创建表test\u考试(id int,age int) 然后我想通过程序添加名为name的列并更新它的值 我已经做了手术 create procedure [dbo].[abcd1] @tablename sysname as begin declare @query nvarchar(4000) declare @name_test varchar(20) set @query = N'select top 10 * from transorg_DW.

我创建了一个名为test_-exam的表 创建表test\u考试(id int,age int) 然后我想通过程序添加名为name的列并更新它的值

我已经做了手术

create procedure [dbo].[abcd1] @tablename sysname
as
begin
declare @query nvarchar(4000)
declare @name_test varchar(20)
set @query = N'select top 10 * from transorg_DW.dbo.'+@tablename
print @query
alter table test_exam add name varchar(20);
update test_exam set name='shyam' where id=1;

exec sp_executesql 
end
这是一个错误

无效的列名


如何更正此错误?

当您向现有表中添加任何列时,请允许null或提供一些默认值。 并且还要防止DDL命令执行一次以上,否则它将在下一次执行时抛出错误。 对于update,由于创建进程时名称列不存在,因此抛出错误。Update语句必须作为动态查询

    create procedure [dbo].[abcd1] @tablename sysname
        as
        begin
        declare @query nvarchar(4000)

        declare @name_test varchar(20)  
        set @query = N'select top 10 * from transorg_DW.dbo.'+@tablename
        print @query
        if not exists(select * from sys.columns c join sys.tables t on c.object_id=t.object_id 
                      where t.name='test_exam' and c.name='name')
         begin
             --new column added must be as null value or default value
             alter table test_exam 
             add name varchar(20) null;

         end
       declare @query1 nvarchar(4000)
        set @query1='update test_exam set name=''shyam'' where id=1';
        exec (@query1)
        exec sp_executesql 
        end

希望这会有所帮助。

您应该动态地和单独地调用它,我认为,它会在编译时为该列调用,因此它会显示错误。现在,您可以执行以下操作

DECLARE @sql NVARCHAR(500)
SET @sql = ' alter table purchase add stat int'
EXEC sp_executesql @sql

SET @sql = ' update purchase set stat=0'
EXEC sp_executesql @sql

注意:如果需要多次调用,请检查列是否存在

您使用的是MySQL、MS SQL Server还是Oracle?(该代码不会在所有列上运行。)sql server 2008错误仍然是相同的“无效列名”。update语句不工作。