小编jme*_*hus的帖子

使用内连接时可更新视图的列属性不正确

我有一个表 atbl_UserSetting,其中有一列名称为 ID,该列是具有标识和种子/增量的主键。

在此输入图像描述

普通用户可以通过视图访问该表。这是视图:

CREATE OR ALTER   VIEW [dbo].[atbv_UserSetting]
AS
SELECT        ID, User_ID, [Key], Value
FROM            dbo.atbl_UserSetting AS US
WHERE        EXISTS
    (SELECT        TOP (1) 1 AS Expr1
    FROM            dbo.atbl_User AS U
    WHERE        (ID = US.User_ID) AND (Login = SUSER_NAME()))
Run Code Online (Sandbox Code Playgroud)

现在,当我运行此查询时,它将返回 true (1):

SELECT COLUMNPROPERTY(OBJECT_ID('atbv_UserSetting'),'ID','IsIdentity')
Run Code Online (Sandbox Code Playgroud)

INFORMATION_SCHEMA.COLUMNS 相同。

但是,如果我将视图更改为此(加入用户表):

CREATE OR ALTER   VIEW [dbo].[atbv_UserSetting]
AS
SELECT        US.ID, US.User_ID, US.[Key], US.Value
FROM            dbo.atbl_UserSetting AS US
INNER JOIN dbo.atbl_User AS U ON U.ID = US.User_ID
WHERE U.[Login] = SUSER_NAME()
Run Code Online (Sandbox Code Playgroud)

该列的相同属性返回 false (0)。

这反过来会导致 SqlCommandBuilder …

sql-server view

5
推荐指数
2
解决办法
459
查看次数

标签 统计

sql-server ×1

view ×1