2017-10-14 109 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

相关问题