【发布时间】:2015-12-03 19:24:53
【问题描述】:
我在 msdn 上阅读了关于 COLUMNS_UPDATED() 的文章。
有例子。 我从示例中减少代码。 使用触发器创建表:
CREATE TABLE dbo.employeeData (
emp_id int NOT NULL PRIMARY KEY,
emp_bankAccountNumber char (10) NOT NULL,
emp_salary int NOT NULL,
emp_SSN char (11) NOT NULL,
emp_lname nchar (32) NOT NULL,
emp_fname nchar (32) NOT NULL,
emp_manager int NOT NULL
);
GO
CREATE TRIGGER dbo.updEmployeeData
ON dbo.employeeData
AFTER UPDATE AS
print COLUMNS_UPDATED()
print COLUMNS_UPDATED() & 14
GO
INSERT INTO employeeData
VALUES ( 101, 'USA-987-01', 23000, 'R-M53550M', N'Mendel', N'Roland', 32);
GO
-
第一次更新
UPDATE dbo.employeeData SET emp_salary = 51000 WHERE emp_id = 101;触发器返回 0x04 和 4 - 一切正常
-
第二次更新
UPDATE dbo.employeeData SET emp_bankAccountNumber = '133146A0', emp_SSN = 'R-M53550M' WHERE emp_id = 101;触发器返回 0x0A 和 10 - 一切正常
但是让我们尝试添加一些列
CREATE TABLE dbo.employeeData2 (
emp_id int NOT NULL PRIMARY KEY,
emp_bankAccountNumber char (10) NOT NULL,
emp_salary int NOT NULL,
emp_SSN char (11) NOT NULL,
emp_lname nchar (32) NOT NULL,
emp_fname nchar (32) NOT NULL,
emp_manager int NOT NULL,
trash1 int NULL,
trash2 int NULL,
trash3 int NULL,
trash4 int NULL,
trash5 int NULL,
trash6 int NULL,
trash7 int NULL,
trash8 int NULL,
trash9 int NULL,
trash10 int NULL,
trash11 int NULL,
trash12 int NULL,
trash13 int NULL,
trash14 int NULL,
trash15 int NULL,
trash16 int NULL,
trash17 int NULL,
trash18 int NULL,
trash19 int NULL,
trash20 int NULL,
trash21 int NULL,
trash22 int NULL,
trash23 int NULL,
trash24 int NULL,
trash25 int NULL,
trash26 int NULL,
trash27 int NULL,
trash28 int NULL,
trash29 int NULL,
trash30 int NULL,
trash31 int NULL
);
GO
CREATE TRIGGER dbo.updEmployeeData2
ON dbo.employeeData2
AFTER UPDATE AS
print COLUMNS_UPDATED()
print COLUMNS_UPDATED() & 14
GO
INSERT INTO employeeData2
(emp_id,emp_bankAccountNumber,emp_salary,emp_SSN,emp_lname,emp_fname,emp_manager)
VALUES ( 101, 'USA-987-01', 23000, 'R-M53550M', N'Mendel', N'Roland', 32);
GO
现在更新时返回false
UPDATE dbo.employeeData2
SET emp_salary = 51000
WHERE emp_id = 101;
-- return 0x0400000000
-- return 0
UPDATE dbo.employeeData2
SET emp_bankAccountNumber = '133146A0', emp_SSN = 'R-M53550M'
WHERE emp_id = 101;
-- return 0x0A00000000
-- return 0
问题: 为什么 0x04 变成 0x0400000000 而 0x0A 变成 0x0A00000000 ? 两个表中的 ColumnId 相同。
【问题讨论】:
标签: sql-server tsql