sql - 如何添加列,然后使用过程更新 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
它通过一个错误
无效的列名。
如何纠正这个错误?
解决方案
当您将任何列添加到现有表时,请允许 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
享受希望这会有所帮助。
推荐阅读
- javascript - Mongoose 无法使用 url 进行身份验证
- exception - 在 Spring Web 应用程序(不是 Spring Boot)中的 JsonSerializer 上引发异常时的错误处理
- google-chrome - Firefox 中是否有相当于 Chrome 标志的“不安全来源被视为安全”?
- python - 我不得不制作 dropdwon menu pygame
- microsoft-graph-api - 如何上传没有文件ID的文件?
- php - 从碳日期中删除小时、分钟和秒
- android - android:jetpack composelazycolumn
- elasticsearch - Elasticsearch API 中的字符串匹配
- c++ - 相关 C++ 程序系统的文档
- c++ - clang 格式规则是否只能应用于结构?