我們不瞭解對方INFORMATION_SCHEMA廓問題。我建議打開分析器,因爲SSMS在INFORMATION_SCHEMA上做了一些SELECT語句和where子句。我懷疑查詢本身會切斷你的觀點。一旦你有一個查詢,SSMS執行以獲取對象列表你應該找到爲什麼它沒有看到一些視圖。
以下是SSMS在選擇所有視圖並啓動腳本時執行的腳本。檢查它們中的任何一個是否不返回DivisionInfo視圖。 (我在我的數據庫中創建了DivisionInfo視圖來重現您的案例)。爲了快速檢查,請逐一執行並在每次查詢後閱讀我的評論。 請注意,您應該事實上使用Profiler捕捉您的環境,因爲它們可能會因環境而異。
顯示屏幕選擇視圖,存儲過程之前,... SSMS執行緊隨腳本來獲取視圖列表:
exec sp_executesql N'SELECT
''Server[@Name='' + quotename(CAST(
serverproperty(N''Servername'')
AS sysname),'''''''') + '']'' + ''/Database[@Name='' + quotename(db_name(),'''''''') + '']'' + ''/View[@Name='' + quotename(v.name,'''''''') + '' and @Schema='' + quotename(SCHEMA_NAME(v.schema_id),'''''''') + '']'' AS [Urn],
v.name AS [Name],
SCHEMA_NAME(v.schema_id) AS [Schema]
FROM
sys.all_views AS v
WHERE
(v.type = @_msparam_0)and(CAST(
case
when v.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = v.object_id and
minor_id = 0 and
class = 1 and
name = N''microsoft_database_tools_support'')
is not null then 1
else 0
end
AS bit)=0)
ORDER BY
[Schema] ASC,[Name] ASC',N'@_msparam_0 nvarchar(4000)',@_msparam_0=N'V'
您的看法上市?您可以添加條件WHERE v.name = 'DivisionInfo'
進行過濾。如果沒有列出DivisionInfo,請檢查此查詢的哪一部分將其從結果集中刪除。
一旦您選擇了腳本對象並啓動腳本,SSMS將創建臨時表,存儲對象並執行腳本以查找相關對象。
在它創建臨時表和插入DivisionInfo視圖:
CREATE TABLE #tempdep(的objid詮釋NOT NULL,objname表SYSNAME NOT NULL,objschema類型爲sysname NULL,objdb類型爲sysname NOT NULL,OBJTYPE SMALLINT NOT NULL)
exec sp_executesql N'INSERT INTO #tempdep
SELECT
v.object_id AS [ID],
v.name AS [Name],
SCHEMA_NAME(v.schema_id) AS [Schema],
db_name(),
2
FROM
sys.all_views AS v
WHERE
(v.type = @_msparam_0)and([email protected]_msparam_1 and SCHEMA_NAME(v.schema_id)[email protected]_msparam_2)',N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000),@_msparam_2 nvarchar(4000)',@_msparam_0=N'V',@_msparam_1=N'DivisionInfo',@_msparam_2=N'dbo'
已將此查詢插入#tempdep中的任何內容?如果不是,請檢查原因。 再一次,您必須使用Profiler從您的環境中獲取查詢,而不是使用我放在這裏的查詢,因爲它們來自我的環境。
當你開始分析時,應該有許多像上面那樣的插入。您需要找到與DivisionInfo相關的一個。您可以使用「查找」選項來查找它,因爲您將在Profiler中看到許多查詢,因爲您有很多其他視圖。爲了使剖析器日誌更小,僅腳本視圖。
正如您所看到的,想法是開始分析並啓動腳本。腳本編寫完成後,停止分析器並檢查由SSMS執行的腳本。你應該找到爲什麼它看不到DivisionInfo。如果Profiler日誌中沒有DivisionInfo,但您可以在嚮導中檢查腳本,然後爲DivisionInfo和腳本編寫的一個視圖採取腳本,並查看它們之間的差異。仔細查看它們之間的差異,以瞭解SMSS用於檢索它們的腳本。
- 出於某種原因SSMS丟棄該視圖根據數據
- 他查詢提取(從探查逮住)
你能腳本他們通過視圖對象資源管理器,並選擇腳本查看右鍵點擊? –
是的,只有當我們「選擇所有」視圖時纔會出現問題,如果您選擇包括它們在內的10-15個視圖,腳本將會生成 –
不幸的是,我不知道除了打開輪廓儀並查看爲什麼SSMS看不到看法?有一次,它將不得不查詢INFORMATION_SCHEMA或其他系統對象以獲取視圖列表。還有一件事:當您在生成腳本時選擇全部時,檢查這3個視圖是否顯示在列表中。 –