3

我必须在表中添加几列,然后在 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);

如何在创建表的同一事务中向表中添加数据?

4

2 回答 2

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

没有交易

于 2012-08-10T03:50:29.977 回答
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 的答案,因此将其发布为社区 wiki。但是,他将他的答案放在他的问题中使得像我这样的谷歌用户很难识别(并支持)我们喜欢的答案。)

于 2014-01-08T23:23:10.113 回答