我有一个表 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 …