Sql server SQL Server相当于Oracle中的专用同义词

Sql server SQL Server相当于Oracle中的专用同义词,sql-server,synonym,Sql Server,Synonym,使用:SQL Server 2016+ Oracle同时支持公共和私有同义词。也就是说,您可以将同义词配置为可用于所有连接或仅用于当前连接,如临时表 我知道SQL server不支持私有同义词,但我正在寻找最有效的替代方法 作为数据结构的示例: CREATE TABLE [dbo].[Session1] ([ID] [UNIQUEIDENTIFIER] NOT NULL, [Val1] [INT] NULL, [Val2] [INT] NULL); GO CREATE TABLE [dbo].

使用:SQL Server 2016+

Oracle同时支持公共和私有同义词。也就是说,您可以将同义词配置为可用于所有连接或仅用于当前连接,如临时表

我知道SQL server不支持私有同义词,但我正在寻找最有效的替代方法

作为数据结构的示例:

CREATE TABLE [dbo].[Session1] ([ID] [UNIQUEIDENTIFIER] NOT NULL, [Val1] [INT] NULL, [Val2] [INT] NULL);
GO

CREATE TABLE [dbo].[Session2] ([ID] [UNIQUEIDENTIFIER] NOT NULL, [Val1] [INT] NULL, [Val2] [INT] NULL);
GO

CREATE TABLE [dbo].[Session3] ([ID] [UNIQUEIDENTIFIER] NOT NULL, [Val1] [INT] NULL, [Val2] [INT] NULL);
GO

CREATE SYNONYM MySession FOR dbo.Session1;
注意。这只是一个示例,这些表包含许多行,我们有一些客户机具有1000个并发会话

现在,我可以以
MySession
的形式访问
Session1
表,但不幸的是,每隔一次连接都会这样

DECLARE @SessionID NVARCHAR(255)
,       @strSQL    NVARCHAR(MAX);

SET @SessionID = N'1';
SET @strSQL = 'SELECT * FROM dbo.Session' + @SessionID;

EXEC sp_executesql @stmt = @strSQL;
动态SQL可能是最有效的,但根据过去的经验,我可以说它确实需要更多的代码和支持

我们还测试了分区视图和表,它们都有缺点


在假设我不是第一个拥有这种数据结构的人的情况下工作,我正在寻找一些关于我可能没有考虑过的其他方法的建议。还有其他选择吗?

你不是第一个。搜索“多租户数据库设计”。所有的解决方案都有利弊。看,你好,丹。这是一个很好的阅读,并解决了总体设计选项。我们实际上有一个多模式设计(尽管我的示例没有显示这一点)。从我的角度来看,我实际上更多地关注的是直接访问方面。如何最好地检索数据+不过我还是要给你提个建议。你不是第一个。搜索“多租户数据库设计”。所有的解决方案都有利弊。看,你好,丹。这是一个很好的阅读,并解决了总体设计选项。我们实际上有一个多模式设计(尽管我的示例没有显示这一点)。从我的角度来看,我实际上更多地关注的是直接访问方面。如何最好地检索数据+不过我还是想听听你的建议。