我正在將一堆SQL Server資料庫轉移到SSDT專案中,這樣我就可以進行源控制。有一個視圖有非常多的列,使我無法建立其中一個專案。
專案結構:
Solution。服務器名稱
|- DB1
|- Views
|- View_that_doesn't_build
|- View_source_1
|- DB2
|- 視圖
|- View_source_2
|- ...
在DB1中,我添加了DB2作為資料庫參考,并將 "不同的資料庫,相同的服務器 "選項作為變數$(DB2)。
該視圖看起來像這樣:
CREATE VIEW "View_that_doesn't_build" --不用擔心。它實際上是一個有效的系統名,為了問題的明確性而重新命名的。
AS。
SELECT
--143列,有些是計算的,有些是正常的。
FROM[/span
[$(DatabaseName)].dbo.View_source_1
INNER JOIN
[$(DB2)].dbo.View_source_2
ON View_source_1.code = View_source_2.code
在構建之后,大多數列沒有報告任何錯誤,但是在其中一些列(通常是最后的X列)出現了這樣的錯誤:
SQL71561。計算的列。[dbo].[View_that_doesn't_build].[Some_column] 包含對一個物件的未解決的參考。要么該物件不存在,要么該參考是模糊的,因為它可能指的是以下任何物件。[$(DB2)].[dbo].[View_source_2].[Some_column]或[dbo].[View_source_1].[Some_column].。
問題是,[Some_column]在兩個源視圖中都不存在,因為除了 "code"(它不會產生這樣的錯誤),每個列的名字在兩個源視圖中都是唯一的。
到目前為止,我所嘗試的是:
[$(DatabaseName)].dbo.View...參考,只使用dbo.View_...(沒有變化)View_source_2.Some_column,而不是Some_column我甚至檢查了該陳述句是否在SSMS中運行,它確實如此。
我怎樣才能解決這個構建錯誤?它的發生是不是因為有大量的列呢?
編輯:我之前說得不是很清楚,在別名表的時候,我也用表的別名限定了所有的列,同樣的錯誤發生了。
uj5u.com熱心網友回復:
這個錯誤是在告訴你這里的問題。由于你沒有給我們任何有意義的DDL,所以我不能 "修復 "你的視圖,我只能用一個不同的場景來演示這個問題,然后展示你是如何修復它的。
以下面2個簡單的表為例:
CREATE TABLE dbo.Table1 (ID int identity,
SomeColumn varchar(20)。
另一列date)。)
呼叫
創建 表 dbo.Table2 (ID int IDENTITY,
T1ID int,
MyColumn varchar(20)。
AnotherColumn datetime2(0))。)
讀取
現在是下面的VIEW:
CREATE VIEW dbo.MyView AS<
SELECT T1.ID, --Intentionally qualified
T1.SomeColumn。
T2.MyColumn。
FROM dbo.Table1 T1
JOIN dbo.Table2 T2 ON T1.ID = T2.T1ID。
當你試圖創建這個VIEW時,你會得到以下錯誤:
列名 "AnotherColumn "不一致。
這是因為AnotherColumn同時出現在 Table1 和 Table2;因此,SQL Server不知道你指的是哪一列。但是請注意,我們沒有對ID進行投訴,因為它是用表的別名T1來限定的,所以SQL Server知道要從哪個表中獲取該值。
因此,為了解決這個問題,用你想要的資料的物件的名稱/別名來限定該列。例如:
CREATE VIEW dbo.MyView AS<
SELECT T1.ID, --Intentionally qualified
T1.SomeColumn。
T2.MyColumn。
T2.AnotherColumn --有意限定 T1.SomeColumn, T2.MyColumn, T2.AnotherColumn
FROM dbo.Table1 T1
JOIN dbo.Table2 T2 ON T1.ID = T2.T1ID。
現在錯誤已經消失了。
uj5u.com熱心網友回復:
SSDT不支持在當前資料庫中參考物件的3部分名稱。使用2部分的名字來代替。dbo.View_source_1而不是[$(DatabaseName)].dbo.View_source_1。
如果你因為某些原因需要3部分的名字,為3部分的名字創建同義詞,并參考2部分的同義詞來代替。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/307262.html
標籤:
上一篇:靜態字典不能用在切換情況下
下一篇:SQL子串和Charindex
