日期:2014-05-17  浏览次数:20627 次

如何实现视图中添加标识列?
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

ALTER  VIEW dbo.PS_TaskOldView
AS
SELECT   TOP 100 PERCENT c.PS_TaskOID AS PS_TaskOldViewOID, c.ProjectName, 
      c.ProjectType, c.ProjectKind, c.BeginMoney, c.SignForDate, c.AssessKind, 
      c.FlowChineseName, b.resolutionCode, b.USR_LOGIN, b.PersonName, 
      b.UCML_UserOID, c.PSAGZOID, c.ProjectID, c.RepID, c.InstanceID, 
      a.ActivityChineseName, d.Memo AS Memo, d.WhyReturn AS WhyReturn,
      d.BeConsUnit AS BeConsUnit, d.AssessStatu AS AssessStatu
FROM dbo.TaskTicket a INNER JOIN
      dbo.AssignTask b ON a.TaskTicketOID = b.TaskTicketOID INNER JOIN
      dbo.PS_Task c ON a.InstanceID = c.InstanceID INNER JOIN
      dbo.PS_AssessTask d ON c.PSAGZOID = d.PS_AssessTaskOID
ORDER BY c.SignForDate DESC

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

我想在视图PS_TaskOldView中增加一int型的列用来显示视图的记录编号。虽然可以用临时表,但是临时表有时间限制,貌似过一段时间就自动没了。。我是要直接在视图里面加一个字段。请教,该如何做。

------解决方案--------------------
视图是执行的时候才编译的,就算加row_number,每次执行的id会根据基础表的变动而变动,所以你这个想法不行
------解决方案--------------------
Select *,Row_Number() OVER(ORder by SignForDate DESC) as rownumber 
From PS_TaskOldView
------解决方案--------------------
视图在添加上序号也是重新按照orderby 来的。没办法标识数据的。 

lz可以使用固定到表中,来实现标识。比如自增列
------解决方案--------------------
引用:
引用:视图在添加上序号也是重新按照orderby 来的。没办法标识数据的。 

lz可以使用固定到表中,来实现标识。比如自增列


具体应该怎么做呢。。??我本来只是想过滤数据的。。但是用max函数时,报 maximum aggregate 运算不能以 uniqueidentifier 数据类型作为参数的错。原因是guid不支……


max不支持uniqueidentifier 数据类型的。 lz这个自增标识还是加上吧。
------解决方案--------------------
那你就别用视图了
创建一个SP,
每次要获取这个视图的最新信息的时候,运行SP,,
SP去产生一个表,实际存在的表
那个表就是你的视图,每次运行前truncate一次。
你不需要最新信息,就直接查询这个表。
这样你看行不,当然数据量大了就没有发。
不过视图本来就不是用来干这个的。你的需要还是通过程序,或者SP完成吧
------解决方案--------------------
引用:
视图是执行的时候才编译的,就算加row_number,每次执行的id会根据基础表的变动而变动,所以你这个想法不行


是这样呀
------解决方案--------------------
视图连编译都是在执行的时候才发生的,你几乎很难保证一个非静态系统中,同一个视图隔一段时间执行,数据会一模一样。你这样的确应该考虑上面各位说的使用临时表或者SP,在使用的时候再加入自增ID。你的核心问题在于视图也会变,所以原有的id很有可能已经不适合用了。
------解决方案--------------------
a建视图语句已经在上面了,希望还有高手过来帮忙,继续等待中。。 
------解决方案--------------------
引用:
引用:视图在添加上序号也是重新按照orderby 来的。没办法标识数据的。 

lz可以使用固定到表中,来实现标识。比如自增列


具体应该怎么做呢。。??我本来只是想过滤数据的。。但是用max函数时,报 maximum aggregate 运算不能以 uniqueidentifier 数据类型作为参数的错。原因是guid不支……