Sql server 尝试在一个begin/end语句中创建列并设置值

Sql server 尝试在一个begin/end语句中创建列并设置值,sql-server,Sql Server,我试图在SQL Server中向我的表中添加一个新列并填充它,但只有它不存在。我尝试了以下方法 if COL_LENGTH('MY_TABLE', 'NEW_COLUMN') is null begin alter table MY_TABLE add NEW_COLUMN nvarchar(1) null; update MY_TABLE set NEW_COLUMN = N'N'; end; 但是得到错误:- 无效的列名“新建列” 在理解这一点时,是因为整体的开始、结束是同时被评估

我试图在SQL Server中向我的表中添加一个新列并填充它,但只有它不存在。我尝试了以下方法

if COL_LENGTH('MY_TABLE', 'NEW_COLUMN') is null
begin
  alter table MY_TABLE add NEW_COLUMN nvarchar(1) null;
  update MY_TABLE set NEW_COLUMN = N'N';
end;
但是得到错误:- 无效的列名“新建列”
在理解这一点时,是因为整体的开始、结束是同时被评估的。有什么办法可以做到这一点吗?

问题是查询在运行之前会被解析。此时,当解析该列时,
NEW\u column
不存在,因此
UPDATE
语句失败

如果
N'N'
是默认值,则添加带有
default
值的列,并使用
with VALUES
预先填充它们:

CREATE TABLE dbo.MY_TABLE (YOUR_COLUMN int);

INSERT INTO dbo.MY_TABLE (YOUR_COLUMN)
VALUES (1),
       (2);
GO

IF COL_LENGTH('MY_TABLE', 'NEW_COLUMN') IS NULL
BEGIN

    ALTER TABLE MY_TABLE ADD NEW_COLUMN nchar(1) NULL DEFAULT N'N' WITH VALUES; --no need for an nvarchar for a length 1 string

END;

GO
SELECT *
FROM dbo.MY_TABLE;
或者,如果它不应该是默认值,则需要在不同的范围内运行
更新
,以便在后面对其进行解析:

IF COL_LENGTH('MY_TABLE', 'NEW_COLUMN') IS NULL
BEGIN

    ALTER TABLE MY_TABLE ADD NEW_COLUMN nchar(1) NULL; --no need for an nvarchar for a length 1 string
    EXEC sys.sp_executesql N'UPDATE dbo.MY_TABLE SET NEW_COLUMN = N''N'';';

END;

问题是查询在运行之前被解析。此时,当解析该列时,
NEW\u column
不存在,因此
UPDATE
语句失败

如果
N'N'
是默认值,则添加带有
default
值的列,并使用
with VALUES
预先填充它们:

CREATE TABLE dbo.MY_TABLE (YOUR_COLUMN int);

INSERT INTO dbo.MY_TABLE (YOUR_COLUMN)
VALUES (1),
       (2);
GO

IF COL_LENGTH('MY_TABLE', 'NEW_COLUMN') IS NULL
BEGIN

    ALTER TABLE MY_TABLE ADD NEW_COLUMN nchar(1) NULL DEFAULT N'N' WITH VALUES; --no need for an nvarchar for a length 1 string

END;

GO
SELECT *
FROM dbo.MY_TABLE;
或者,如果它不应该是默认值,则需要在不同的范围内运行
更新
,以便在后面对其进行解析:

IF COL_LENGTH('MY_TABLE', 'NEW_COLUMN') IS NULL
BEGIN

    ALTER TABLE MY_TABLE ADD NEW_COLUMN nchar(1) NULL; --no need for an nvarchar for a length 1 string
    EXEC sys.sp_executesql N'UPDATE dbo.MY_TABLE SET NEW_COLUMN = N''N'';';

END;

使用动态SQL。使用动态SQL。