如果列不存在,则向表中添加列并填充添加的列

Jas*_*ers 2 sql-server alter-table table

我有一个看起来像这样的代码

declare @query = '
   Alter Table Temp
   Add NewColumn int

   update Temp
   set NewColumn = 100'

exec (@query)
Run Code Online (Sandbox Code Playgroud)

它将给出错误 NewColumn 不存在。但如果我在不使用 @query = '' 的情况下正常运行它,它运行得很好。另外,当您使用 @query = ' text ' 然后 exec 运行这样的代码时,它被称为什么?

Cha*_*ace 5

您正在动态 SQL 中将它们作为一批执行。所以编译器不会允许它,因为在编译时该列还不存在。

一起执行时它不会起作用,这是不正确的。您正在单独的批次中逐行执行它们。

   Alter Table Temp
   Add NewColumn int
Run Code Online (Sandbox Code Playgroud)
   update Temp
   set NewColumn = 100
Run Code Online (Sandbox Code Playgroud)
   Alter Table Temp
   Add NewColumn int

   update Temp
   set NewColumn = 100
Run Code Online (Sandbox Code Playgroud)

所以你需要这样做

Alter Table Temp
Add NewColumn int;

exec sp_executesql N'
   update Temp
   set NewColumn = 100
';
Run Code Online (Sandbox Code Playgroud)

数据库<>小提琴