SQL Server计算的列错误,带有多个插入物



我在SQL Server 2008中有一个表格 - 我们调用表mytable。该表的列名为状态,该列不是计算的列,并且定义为Varchar(40),并且允许nulls;但是,此列上还有默认约束,默认值='pool'。我刚刚在表中添加了一个计算的列,使用以下内容:

ALTER TABLE MyTable 
ADD PrimaryStatus AS 
    CASE 
       WHEN Status LIKE '%/%' THEN LEFT(Status,CHARINDEX('/', Status) - 1) 
       ELSE Status 
    END PERSISTED

如果我一一将记录插入表中(并使用Status使用约束默认为"池"),则可以正常工作;例如,此SQL语句没有问题:

INSERT INTO MyTable (Name) VALUES ('Foo')

使用上述SQL,我最终在表中获得了名称='foo'和status ='pool''和primarystatus ='pool'

的新记录

但是,如果我执行多行插入,则如下:

INSERT INTO MyTable (Name) VALUES ('Foo'),('Bar')

然后引发错误:

msg 537,第16级,状态2,第1行
无效的长度参数传递到左或子字符串函数。

如果我放下默认约束或计算列(或两者),则多行INSERT工作正常;但是由于某种原因,具有约束和计算列的同时导致多行INSERT失败。我尝试通过多种方法来调整计算的列来说明零(即使我认为在评估顺序下不应该重要),但似乎没有任何解决问题。

有人以前见过这样的东西吗?

我试图复制错误。但是,我没有任何错误。我本可以将其添加为评论,但还没有足够的积分。无论如何,这就是我所做的 -

CREATE TABLE [dbo].[MyTable](
    [Name] [varchar](50) NULL,
    [Status] [varchar](50) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MyTable] ADD  CONSTRAINT [DF_MyTable_Status]  
DEFAULT ('POOL') FOR [Status]
GO

然后我在您的代码中删除了一个额外的),然后做了 -

ALTER TABLE MyTable ADD PrimaryStatus AS 
CASE WHEN Status LIKE '%/%' THEN LEFT(Status,CHARINDEX('/',Status)-1) 
ELSE Status END PERSISTED

接着 -

INSERT INTO MyTable (Name) VALUES ('Foo')
INSERT INTO MyTable (Name) VALUES ('Foo'),('Bar')

它有效。我想念什么吗?

相关内容

  • 没有找到相关文章

最新更新