我在 SQL Server 2008 中有一个表 - 我们将表称为 MyTable。该表有一个名为 Status 的列,它不是计算列,定义为 varchar(40),它允许 NULL;但是,此列上还有一个 DEFAULT CONSTRAINT,默认值 = 'POOL'。我刚刚使用以下命令向表中添加了一个计算列:
ALTER TABLE MyTable
ADD PrimaryStatus AS
CASE
WHEN Status LIKE '%/%' THEN LEFT(Status,CHARINDEX('/', Status) - 1)
ELSE Status
END PERSISTED
如果我将记录一一插入表中(并Status
使用约束默认为“POOL”),它就可以正常工作;例如,这条 SQL 语句没有问题:
INSERT INTO MyTable (Name) VALUES ('Foo')
使用上面的 SQL,我最终在表中创建了一条新记录,其中 Name = 'Foo' 和 Status = 'POOL' 和 PrimaryStatus = 'POOL'
但是,如果我执行如下所示的多行 INSERT:
INSERT INTO MyTable (Name) VALUES ('Foo'),('Bar')
然后它抛出一个错误:
消息 537,级别 16,状态 2,第 1 行
传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
如果我删除默认约束或计算列(或两者),多行INSERT
工作正常;但由于某种原因,同时具有约束和计算列导致多行INSERT
失败。我尝试以各种方式调整计算列来解释 NULL(尽管我认为考虑到评估的顺序并不重要),但似乎没有什么可以解决这个问题。
以前有人见过这样的东西吗?