无法将行添加到 SQL Server 视图

Posted

技术标签:

【中文标题】无法将行添加到 SQL Server 视图【英文标题】:Cannot add row to SQL Server View 【发布时间】:2019-11-13 09:10:57 【问题描述】:

我有一个视图,它由两个表 TABLE_ONE 和 TABLE_TWO 组成。

这两个表通过它们的主键链接:PKT_UID(见图)。

我在两个表中添加了两行,并为它们提供了相同的 PKT_UID,但是当我在视图中搜索该 UID 时,视图没有显示任何具有此 PKT_UID 的行。

我对 SQL 视图了解不多,但我的理解是只要两个表中的两行通过相同的主键链接,它就应该显示在视图中。我错过了什么?

查看代码:

SELECT        dbo.TABLE_ONE.PKT_UID, dbo.TABLE_ONE.IT_UID, dbo.TABLE_ONE.SKT_UID, dbo.TABLE_ONE.RMS_XSP, 
                         dbo.TABLE_ONE.S_MT, dbo.TABLE_ONE.E_MT, dbo.TABLE_ONE.KILP, dbo.TABLE_ONE.KILT, 
                         dbo.TABLE_ONE.IIC, dbo.TABLE_ONE.L_D, dbo.TABLE_ONE.S_D, dbo.TABLE_ONE.S_DAM, 
                         dbo.TABLE_ONE.E_DF, dbo.TABLE_ONE.E_DFD, dbo.TABLE_ONE.H_U, dbo.TABLE_ONE.JK, 
                         dbo.TABLE_ONE.JKT, dbo.TABLE_ONE.TRCE, dbo.TABLE_ONE.MOD, dbo.TABLE_ONE.TAK, dbo.TABLE_ONE.DG_AR, 
                         dbo.TABLE_ONE.DG_LENGTH, dbo.TABLE_ONE.XSP_OFF, dbo.TABLE_ONE.JIK_UID, dbo.TABLE_ONE.FA_UID, 
                         dbo.TABLE_ONE.JOB, dbo.TABLE_TWO.PKT_UID AS GULL_UID, dbo.TABLE_TWO.GULL_T_UID, dbo.TABLE_TWO.GULL_FRC_UID, 
                         dbo.TABLE_TWO.GULLOPP_UID, dbo.TABLE_ONE.RMMS_XSP, dbo.TABLE_ONE.GANG, dbo.TABLE_ONE.TRM_BSD_DATE, 
                         dbo.TABLE_ONE.DOLM, dbo.TABLE_ONE.DONM, dbo.TABLE_TWO.GULLM_UID, dbo.TABLE_TWO.AR_UID, 
                         dbo.TABLE_TWO.PAR_UID, dbo.TABLE_TWO.RCT_UID, dbo.TABLE_TWO.PG_C, dbo.TABLE_TWO.RCT_YN_UID, 
                         dbo.TABLE_TWO.SCHD_TM_UID, dbo.TABLE_ONE.NRS, dbo.TABLE_TWO.BS_M, dbo.TABLE_TWO.EMB_UID, 
                         dbo.TABLE_TWO.MNG_REQ_UID, dbo.TABLE_TWO.FORM_R, dbo.TABLE_TWO.FORM_R_NAME, dbo.TABLE_TWO.SCHED_UID, 
                         dbo.TABLE_ONE.SH_G, dbo.TABLE_ONE.SH_GT, dbo.TABLE_TWO.PKT_UID AS IT_N, CAST(dbo.TABLE_TWO.PKT_UID AS char(15)) 
                         AS GULL_NAME, dbo.TABLE_TWO.PACK
FROM            dbo.TABLE_TWO INNER JOIN
                         dbo.TABLE_ONE ON dbo.TABLE_TWO.PKT_UID = dbo.TABLE_ONE.PKT_UID
WHERE        (dbo.TABLE_ONE.IT_UID = 1160) AND (dbo.TABLE_ONE.E_DFD = 0)```

【问题讨论】:

视图的完整代码是什么?它有 WHERE 子句吗? 视图的SELECT是否返回了单机执行的预期结果? @BarneyL 谢谢!你解决了我的问题。视图代码中有一个未实现的 WHERE 子句。我没有意识到这是我第一次设置这样的视图。 【参考方案1】:
SELECT 
    rm_c.ITEM_UID
   ,rm_g.ITEM_UID 

FROM
    RM_COMMON_ATTRIBUTES rm_c
LEFT JOIN RM_GULLY_2010_A rm_g
    ON rm_g.ITEM_UID = rm_c.ITEM_UID

如果这显示两个 UID 都匹配,那么它不是表格

如果您使用的是报表生成器(您是否尝试过刷新所有字段)

【讨论】:

【参考方案2】:

感谢@BarneyL 解决。视图代码中有一个WHERE RM_COMMON_ATTRIBUTES.ITEM_TYPE_UID = 1160 条件未实现。

【讨论】:

以上是关于无法将行添加到 SQL Server 视图的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 视图中有效地将行转换为列

将行添加到可编辑的网格视图后,日期选择器未出现

SQL Server:无法在视图上创建索引,因为它引用派生表。

无法从链接的 SQL Server 查询视图

INSTEAD OF INSERT 触发器未触发视图 - SQL Server

在特定数据库中创建 SQL Server 视图 [重复]