当设置持久化时候ALTER TABLE TOrderDetail ADD  FDiscountPrice  AS [FBookPrice]*[FAmount]*[FDiscount] PERSISTED
直接丢错误出来
消息 1935,级别 16,状态 1,第 1 行
无法创建索引。对象 'TOrderDetail' 是在禁用下列 SET 选项设置的情况下创建的:'ANSI_NULLS'。谢谢大家指点

解决方案 »

  1.   

    不如直接创建表时这样用.
    create table tb(a int , b int , c as a * b)
    goinsert into tb (a,b) values(1 , 6)
    insert into tb (a,b) values(2 , 7)
    insert into tb (a,b) values(3 , 8)
    insert into tb (a,b) values(4 , 9)
    insert into tb (a,b) values(5 , 10)
    select * from tbdrop table tb/*
    a           b           c           
    ----------- ----------- ----------- 
    1           6           6
    2           7           14
    3           8           24
    4           9           36
    5           10          50(所影响的行数为 5 行)*/
      

  2.   

    SET ANSI_NULLS ON
    ALTER TABLE TOrderDetail ADD  FDiscountPrice  AS [FBookPrice]*[FAmount]*[FDiscount] PERSISTED在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样。说明  ANSI_NULLS 是在处理计算列或索引视图上的索引时必须设置为所需值的七个 SET 选项之一。还必须将选项 ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、QUOTED_IDENTIFIER 和 CONCAT_NULL_YIELDS_NULL 设置为 ON,而必须将 NUMERIC_ROUNDABORT 设置为 OFF。不明白原因,不加PERSISTED关键字就没问题