SQL Server中为视图添加表中不存在的IDENTITY类型Row_ID列
解决方法
由于SQL视图无法直接创建IDENTITY(1,1)类型的列,你可以通过以下几种方式生成满足需求的唯一行标识:
1. 直接引用源表的Row_ID(优先推荐)
如果你的视图数据源就是已创建Row_ID主键的表,直接复用原表的Row_ID即可,完全匹配你需要的查询逻辑:
CREATE VIEW view_name AS SELECT Row_ID, -- 直接使用原表的IDENTITY主键列 -- 其他需要展示的列 FROM SPCO_PSP_test -- 替换为你的源表名称
这种方式下,视图的Row_ID和原表完全一致,你提供的NOT EXISTS查询可以直接正常执行。
2. 使用ROW_NUMBER()生成唯一递增整数
如果视图是多表关联或需要重新生成行标识,用ROW_NUMBER()函数为每行分配唯一整数:
CREATE VIEW view_name AS SELECT ROW_NUMBER() OVER (ORDER BY 稳定排序列) AS Row_ID, -- 需指定一个稳定的排序列(如原表主键、创建时间) -- 其他需要展示的列 FROM 数据源表/关联语句
注意:
ORDER BY必须指定,否则每次查询视图时Row_ID可能会随机变化。若无需特定排序,部分SQL Server版本支持ORDER BY (SELECT NULL),但仍建议使用实际存在的列保证稳定性。
3. 用NEWID()生成唯一GUID(非整数场景可选)
如果不需要整数类型的Row_ID,可以生成唯一标识符:
CREATE VIEW view_name AS SELECT NEWID() AS Row_ID, -- 其他需要展示的列 FROM 数据源表
但此方法生成的是uniqueidentifier类型,和你表中的int类型不匹配,仅适用于无需和原表int类型Row_ID关联的场景。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

