我有一种观点,我可以使用SQL Server 2012 Enterprise版本11.0.6251 Windows NT 6.3(15063)进行更新。更新基于union select的SQL Server视图中的数据
但是,该视图不允许我在SQL Server 2012企业版11.0.3128 Windows NT 6.2(9200)上进行更新。
我只是试图更新视图中的一列。 (CreditSigned专栏)
我看了看是否有办法将SQL Server 11.0.3128升级到11.0.3128,但SQL Server告诉我我有最新版本,并且没有任何升级。
有我丢失的东西,让我来更新SQL Server在视图中的数据2012企业11.0.3128
CREATE VIEW [dbo].[Credits] AS SELECT * FROM (SELECT
[g].[SortNbr],
[g].[GradeName] + ' ' + (CASE WHEN [g].[PersonID] IS NULL THEN '' ELSE [t].[LastName] + ', ' + [t].[FirstName] END) AS GradeLongName,
[m].[MealID],
[MealDate],
[MealLine1],
[MealLine2],
[MealLine3],
[op].[FirstName] + ' ' + [op].[LastName] + ' ' + ISNULL(NULLIF ([op].[UniqueName], ''), '') + ': ' + [Drink] + ' ' + ISNULL(NULLIF ([OrderComment], ''), '') AS OrderText,
[gt].[GradeTypeID],
[g].[GradeID],
[o].[OrderID],
[o].[CreditIssued]
FROM ((([People] AS op
INNER JOIN ([DrinkOptions] AS do
INNER JOIN ([Meals] AS m
INNER JOIN [Orders] AS o
ON [m].[MealID] = [o].[MealID])
ON [do].[DrinkID] = [o].[DrinkID])
ON [op].[PersonID] = [o].[PersonID])
INNER JOIN [Grades] AS g
ON [op].[GradeID] = [g].[GradeID])
LEFT JOIN [People] AS t
ON [g].[PersonID] = [t].[PersonID])
INNER JOIN [GradeTypes] AS gt
ON [g].[GradeTypeID] = [gt].[GradeTypeID]
UNION SELECT
[g].[SortNbr],
[g].[GradeName] + ' ' + (CASE WHEN [g].[PersonID] IS NULL THEN '' ELSE [op].[LastName] + ', ' + [op].[FirstName] END) AS GradeLongName,
[m].[MealID],
[MealDate],
[MealLine1],
[MealLine2],
[MealLine3],
[op].[FirstName] + ' ' + [op].[LastName] + ' ' + ISNULL(NULLIF ([op].[UniqueName], ''), '') + ': ' + [Drink] + ' ' + ISNULL(NULLIF ([OrderComment], ''), '') AS OrderText,
[gt].[GradeTypeID],
[g].[GradeID],
[o].[OrderID],
[o].[CreditIssued]
FROM ((([People] AS op
INNER JOIN [Grades] AS g
ON [op].[LunchTimeID] = [g].[GradeID])
INNER JOIN ([Meals] AS m
INNER JOIN [Orders] AS o
ON [m].[MealID] = [o].[MealID])
ON [op].[PersonID] = [o].[PersonID])
INNER JOIN [DrinkOptions] AS do
ON [o].[DrinkID] = [do].[DrinkID])
INNER JOIN [GradeTypes] AS gt
ON [g].[GradeTypeID] = [gt].[GradeTypeID]) a
WHERE SortNbr != 18
你得到了什么错误?你试图“更新”它意味着什么? – scsimon
这种观点有点疯狂。这种连接语法是由自动化工具编写的,或者是一个真正想让事情变得比他们需要的更复杂的人。我在这两个查询中看到的唯一区别是,第一个参数将People表格以相同的值连接到People上。我想也许这是一个父母/小孩的事情,但不是,它只是与它加入的同一行。您也可以将where谓词添加到每个查询中,并完全消除对外部查询的需要。 –
正如@Dan已经提到的那样,具有'union'或'union all'选项*的视图通常*是不可更新的*。我实际上有时会故意创建这种类型的视图。 – cars10m