首页 > 解决方案 > SQL用另一个表的列中的值替换视图列中的所有行值

问题描述

我是 SQL 新手,所以这可能是一个简单的问题,但我自己找不到解决方案。我需要用表 ( ) 中列中的值替换或更新Startdate视图 ( view1)新列中的所有值。中的值始终相同(它是一个日期,例如 01.01.2001 00:00:00)。Startdatetable1table1

到目前为止,我所做的是在以下位置创建一个具有正确格式的空列view1

CREATE VIEW view1 
AS SELECT [fields], 
          [other fields], 
          cast(NULL as datetime2(7)) AS [Startdate] 
FROM ...

现在我尝试通过以下方式更新该列:

UPDATE [dbo].[view1] 
   SET [dbo].[view1].[Startdate] = [EGDB].[dbo].[table1].[Startdate]

但我收到错误“更新或插入视图或函数‘view1’失败,因为它包含派生或常量字段。”

我的错在哪里?

标签: sqlsql-server

解决方案


根据评论和“中的值table1始终相同”的问题,您可以使用
CROSS JOIN (SELECT TOP (1) [Startdate] FROM [EGDB].[dbo].[table1]) as startdate
并使用startdate.[Startdate]代替cast(NULL as datetime2(7)) AS [Startdate]
但是,我认为奇怪的是所有行都具有相同的值-如果不是这种情况或将来不会,您可以分别更改TOP (1)MINMAX获取最早/最晚的开始日期。


推荐阅读