【发布时间】:2014-10-13 22:53:46
【问题描述】:
我正在尝试将行从一列复制到另一列。执行流程很简单。
- 检查列是否存在。
- 如果没有 - 添加列
- 定义光标并为新列填充行
- 将列设置为 NOT NULL。
不幸的是,我遇到了这种类型的错误。它说该列不存在。但我已经创建了它并提交了事务。可能是什么原因?谢谢!
消息 207,第 16 层,状态 1,第 29 行
列名“Field_Name”无效。
代码:
begin transaction;
IF NOT EXISTS(SELECT * FROM sys.columns
WHERE Name = N'Field_Name' and Object_ID = Object_ID(N'dbo.Table_Name'))
BEGIN
ALTER TABLE [dbo].[Table_Name]
ADD [Field_Name] VARCHAR(255)
END
commit;
DECLARE
@var1 int,
@var2 varchar(255)
DECLARE copy_cursor CURSOR FOR
SELECT id, Name
FROM Table_Name
OPEN copy_cursor
FETCH NEXT FROM copy_cursor
INTO @var1, @var2
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Table_Name
SET Field_Name = @var2
WHERE id = @var1
FETCH NEXT FROM copy_cursor
INTO @var1, @var2
END
CLOSE copy_cursor;
DEALLOCATE copy_cursor;
ALTER TABLE Table_Name ALTER COLUMN Field_name varchar(255) NOT NULL
【问题讨论】:
-
如果表不存在如何添加列?
-
如果表不存在,添加一些东西有点困难:)
-
对不起。如果列不存在
-
至于 SQL 对我来说没有任何问题,除了我不在我的 SQL 中使用分号,我会使用
FAST FORWARD为我的游标声明并在提交后有一个GO我的交易:)SQL Server utilities interpret GO as a signal that they should send the current batch of Transact-SQL statements to an instance of SQL Server.link -
重新创建了我的问题。提交后使用 GO 应该可以解决这个问题。
标签: sql sql-server