首页 > 解决方案 > 如何添加列,然后使用过程更新 sql server 中的列

问题描述

我已经创建了名为 test_exam 的表,创建表 test_exam(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

它通过一个错误

无效的列名。

如何纠正这个错误?

标签: sqlsql-serversql-server-2008

解决方案


当您将任何列添加到现有表时,请允许 null 或提供一些默认值。并且还要防止 DDL 命令被多次执行,否则下次执行时会抛出错误。并更新其抛出错误,因为在创建 proc 时 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
        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

享受希望这会有所帮助。


推荐阅读