Sql-Server-2008

在 SQL Server 跨數據庫視圖中搜尋列的一部分

  • June 22, 2011

我目前正在編寫一個與我只有讀取權限的第 3 方供應商的 SQL Server 2008 數據庫介面的應用程序。我們有一個單獨的數據庫,其中包含跨數據庫視圖和儲存到供應商數據庫中的儲存過程,用於我們的自定義應用程序。

其中一列包含這樣的建築物和房間數據:DON-203、DON-303、SGRUE-102、EVN-1010

基本上,它是一組字母(表示建築物)後跟連字元和數字(表示房間號)。我只需要對列的房間號(數字)部分執行查詢。

  • 我不能在表中使用預先計算的列,因為我沒有對原始數據庫的寫訪問權。
  • 我無法在原始數據庫中創建觸發器
  • 標量函式將返回正確的結果,但對於將非常頻繁地查詢的大型數據集來說似乎效率極低
  • 據我所知,我不能使用索引視圖,因為該視圖引用了不同數據庫中的表。
  • 可以隨時將新建築物添加到程序中,因此我無法在某處硬編碼所有建築物前綴的列表。它們也沒有儲存在任何地方。

有沒有一種體面的方法來處理這種情況?

編輯:這是一個範例架構(刪除了所有不相關的數據)

CREATE TABLE [dbo].[Room]
(
   [RoomID] [int] IDENTITY(0,1) NOT NULL,
   [Description] [varchar](30) NOT NULL,
   CONSTRAINT [PK_Room] PRIMARY KEY CLUSTERED 
   (
           [RoomID] ASC
   )
)

描述中有一個按升序排列的非唯一索引

樣本數據:

RoomID  Description
0       DON-101
1       DON-102
2       DON-103
...
118     DON-427
119     DON-428
...
124     EVN-107
125     EVN-108
...
511     NGRI-1007
512     NGRI-1008
...
564     NGRI-227
565     NGRI-228

您是否允許將該表複製到另一個數據庫中?使用事務複製,用於最新的數據訪問。如果是,那麼我會測試一個更繁瑣的過程,例如複製所需的表,根據需要建構另一個表或具有計算列的物化視圖。

如果複製不是一個選項,我會說您需要建立一個計劃的程序來將該表放入您的數據庫並繼續在本地處理數據。與第一個建議完全相同,但使用您自己的腳本和時間表。

那,或者我認為您堅持使用從性能角度來看並不是最佳選擇的標量函式。

引用自:https://dba.stackexchange.com/questions/3390