我有一種觀點,我可以使用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