Sql server 尝试在一个begin/end语句中创建列并设置值
我试图在SQL Server中向我的表中添加一个新列并填充它,但只有它不存在。我尝试了以下方法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; 但是得到错误:- 无效的列名“新建列” 在理解这一点时,是因为整体的开始、结束是同时被评估
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。