我必须在表中添加几个列,然后在SQL Server 2008中更新它们。表定义归结为:
CREATE TABLE tbl (id INT PRIMARY KEY,
dvt NVARCHAR(32),
dd NVARCHAR(32));
INSERT INTO tbl (id, dvt, dd)
VALUES(1, '1', NULL);
INSERT INTO tbl (id, dvt, dd)
VALUES(2, '', NULL);
INSERT INTO tbl (id, dvt, dd)
VALUES(3, '2,5', NULL);
INSERT INTO tbl (id, dvt, dd)
VALUES(4, '13, 34, 45, 5', NULL);
INSERT INTO tbl (id, dvt, dd)
VALUES(5, '-1, 8, 10', NULL);
INSERT INTO tbl (id, dvt, dd)
VALUES(6, '-2, -10', NULL);
如何在创建表的同一事务中向表中添加数据?
答案 0 :(得分:5)
尝试类似
的内容SET XACT_ABORT ON
**--BEGIN TRANSACTION**
ALTER TABLE tbl ADD d0 SMALLINT NULL
ALTER TABLE tbl ADD d1 SMALLINT NULL
ALTER TABLE tbl ADD d2 SMALLINT NULL
GO
UPDATE tbl
SET
d0 = 1,
d1 = 2,
d2 = 3
**--COMMIT TRANSACTION**
SET XACT_ABORT OFF
SELECT * FROm tbl
没有交易
答案 1 :(得分:2)
更新语句必须括在EXEC()
块中。
SET XACT_ABORT ON
BEGIN TRANSACTION
IF 1=1 BEGIN --used for simplicity to illustrate condition
ALTER TABLE tbl ADD d0 SMALLINT NULL
ALTER TABLE tbl ADD d1 SMALLINT NULL
ALTER TABLE tbl ADD d2 SMALLINT NULL
EXEC('UPDATE tbl SET d0 = 1, d1 = 2, d2 = 3')
END
COMMIT TRANSACTION
SET XACT_ABORT OFF
SELECT * FROm tbl
(这个答案实际上是ahmd0&#39的回答,因此将其作为社区维基发布。但是,他在他的问题中提出他的答案使得像我这样的谷歌难以识别(并提升)我们喜欢的答案。)