2017-10-14 169 views
0

我在我的服務器中有十到二十個數據庫。每當我需要查詢我想把這樣的事情如何在查詢中縮短或別名數據庫名稱?

Select * from otp-devices.dbo.deviceid 
select module from mr1ghp/security.dbo.alarmmodlink 

我們的數據庫名稱很長。是否有可能縮短或別名數據庫名稱查詢otp-devicesmr1ghp/security

+0

我不明白你的問題。首先,'otp-devices.dbo.deviceid'不是數據庫的有效名稱。它接近表引用(但連字符不正確)。你的問題是什麼?大量的數據庫或大量的表? –

+0

@GordonLinoff。 dbo是模式,deviceid是表。 – coffemug

+0

@GordonLinoff,更新了問題 – coffemug

回答

2

你可以讓一個別名與關鍵字AS這樣的:

SELECT * FROM `otp-devices.dbo.deviceid ` AS otp 
+0

對於一個查詢,這是正確的。但我已經看到了從數據庫級別本身做到的一種方法。也就是說,我們可以在我們的sql服務器的任何地方使用該名稱作爲數據庫名稱。 – coffemug

+0

@coffemug在SQL Server中沒有類似的東西。除了可能的sqlcmd變量。 –

1

由於的SQL Server 2008,SQL Server已支持的同義詞。

你可以閱讀關於語法here

你可以閱讀關於想法here

我不是同義詞迷。我發現當相同的對象在不同的​​地方有不同的名稱時,數據庫很難瀏覽 - 我不能輕易看到映射(就像在單個查詢中使用別名一樣)。

+0

數據庫名稱不支持同義詞 –

+0

@MartinSmith。 。 。但是它們支持表名,所以這可能仍然有助於OP。 –

+0

@戈登林諾夫。是的 – coffemug

-1

另一種可能性是使用視圖來提供到其他數據庫中表的鏈接。使用命名約定來確定視圖鏈接到哪個數據庫。這也有助於將代碼與數據庫名稱的任何更改隔離開來。

CREATE VIEW vOD_deviceid AS SELECT * FROM [otp-devices].dbo.deviceid ; 

CREATE VIEW vSC_alarmmodlink AS SELECT * FROM mr1ghp/security.dbo.alarmmodlink 

然後在其他地方

SELECT * FROM vOD_deviceid; -- OD prefix identifies the database 
SELECT module FROM vSC_alarmmodlink; 

剛剛替補視圖名稱只要你會使用完整的database.schema.tablename。

+0

這可以爲重複查詢,我確實有一些意見的目的,但大部分時間我們的要求改變,我們沒有一個特定的查詢爲我們的目的 – coffemug

+0

我的意思是,一旦你已經定義的基線視圖表,那麼你總是使用視圖而不是直接引用表 - 即使在其他視圖中。所以視圖是另一個數據庫中表的單個本地表示。對於每個查詢,您都不會創建不同的視圖,這會破壞目標。 – JohnRC

相關問題