已知一个视图有两张基表:
CREATE TABLE T_test_A
(  ID int IDENTITY(1,1),
   Name varchar(50)
)CREATE TABLE T_test_B
(
  ID int,
  Name varchar(50)
)
其中T_test_A 含有identity 列,新建视图
create view T_test_View
as
 select a.ID,b.Name
 from T_test_A a,T_test_B b
 where a.Name=b.Namesp_help T_test_View 发现视图 identity:No identity column defined.只是为什么?
我做了些测试发现,如果视图只有一个基表,且这个基表有identity列,则对应的视图也有identity列,但是如果视图含有两个或两个以上基表,无论基表是否都含identity列,对应的视图都没identity,这又是为什么呢?如何让有两个基表的视图也有identity列呢?

解决方案 »

  1.   

    视图是保存好的计划 或者sql语句,不会存储数据的。不用自增。
      

  2.   

    间接的创建identity 列Create VIEW [dbo].[View_11111]
    AS
    SELECT    fid=ROW_NUMBER() OVER (ORDER BY dbo.tb1.str2),  dbo.tb1.*, dbo.tb2.str2 AS Expr1, dbo.tb2.str3 AS Expr2
    FROM         dbo.tb1 INNER JOIN
                          dbo.tb2 ON dbo.tb1.str2 = dbo.tb2.str1
      

  3.   

    在PB+SQLSERVER的开发中,在向datawindow里插入一条数据后,会进行自动检索,检索的语句为:select MAX(IDENTITYCOL) from T_test_View,但是如果T_test_View 没有identity列则会报以下错误:Invalid column name 'identitycol'.  
    select MAX(IDENTITYCOL) from T_test_View 是PB自动生成的,所以只能改写视图了。
      

  4.   

    检索的语句为:select MAX(IDENTITYCOL) from T_test_View不能从表中检索吗
      

  5.   

    不能,因为PB+SQLSERVER开发的程序,它是通过datawindow向这个视图插数据的,所以自动生成的重新检索的语句也是from这个视图。这个视图有两个基表,一个含有identity列,一个没有。
      

  6.   

    MAX(IDENTITYCOL),为什么不改成@@IDENTITY或SCOPE_IDENTITY 、IDENT_CURRENT('table_name')
      

  7.   

    这些都没关系,主要的问题是对应的那个视图没有identity,如果能让视图有identity,那问题也就解决了。
      

  8.   

    是这样的,现在有一个视图T_test_View,它有两个基表,一个带identity 属性列 T_test_A表,一个没有identity 属性列 T_test_B 表,(建表语句见 1 楼)
    create view T_test_View
    as
     select a.ID,b.Name
     from T_test_A a,T_test_B b
     where a.Name=b.Name
    我要的操作是:select MAX(IDENTITYCOL) from T_test_View,会报错:Invalid column name 'identitycol'。。现在的问题是如何能让这句select MAX(IDENTITYCOL) from T_test_View 能执行成功。你可以修改试图,或者建其它表。
      

  9.   

    --这样?
    select MAX(ID) from T_test_View
      

  10.   

    使用SELECT MAX(ID) FROM VIEW 查询没有问题
    在SQL SERVER 2000中使用 INSERT INTO VIEW 。。的方法也没有问题
    但在PB中使用DW来插入数据就有提示 INVALID COLUMN NAME ‘IDENTITYCOL’