Sql-Server

用 SQL Server 替換用於訪問連結表的 MS-Access 前端?

  • September 26, 2012

是否可以像在 MS-Access 中那樣使用 SQL Server / SQL Server Management Studio 跨連結表進行查詢?

至少可以說,MS-Access 前端令人沮喪且耗時,這促使我尋找替代方案。我開始使用 SQuirreL SQL,並且對它非常滿意,但它沒有連結表功能,因此您在可以執行的查詢方面受到了一些限制。

另外,您能否為我提供有關如何設置類似內容的教程或書籍的建議?

SQL Server Management Studio 允許您創建多個版本的查詢,您可以在其中同時查看 SQL 文本和結果。

您可以使用點表示法來引用同一伺服器上不同數據庫中的表,例如:

SELECT * FROM database.schema.table

如果需要從多個伺服器查詢數據,可以在 SQL Server 中創建連結伺服器,以提供 Access 前端的所有功能。這允許您使用 4 部分的點表示法,例如:

SELECT * FROM server.database.schema.table

例如,此程式碼在本地 SQL Server 上創建 2 個數據庫,其中有 2 個表,每個表包含一條記錄。最後SELECT將 2 個表中的數據連接到單個輸出中:

CREATE DATABASE Test1 ON PRIMARY 
   (NAME = 'Test1_Data'
       , FILENAME = 'C:\Temp\Test1_data.mdf'
       , SIZE = 10MB
       , MAXSIZE = UNLIMITED
       , FILEGROWTH = 10MB
   )
LOG ON
   (NAME = 'Test1_Log'
       , FILENAME = 'C:\Temp\Test1_log.mdf'
       , SIZE = 10MB
       , MAXSIZE = UNLIMITED
       , FILEGROWTH = 10MB
);

CREATE DATABASE Test2 ON PRIMARY 
   (NAME = 'Test2_Data'
       , FILENAME = 'C:\Temp\Test2_data.mdf'
       , SIZE = 10MB
       , MAXSIZE = UNLIMITED
       , FILEGROWTH = 10MB
   )
LOG ON
   (NAME = 'Test2_Log'
       , FILENAME = 'C:\Temp\Test2_log.mdf'
       , SIZE = 10MB
       , MAXSIZE = UNLIMITED
       , FILEGROWTH = 10MB
);
GO

USE Test1;
GO
CREATE TABLE TestTable1
(
   ID INT NOT NULL PRIMARY KEY CONSTRAINT PK_TestTable1 IDENTITY(1,1)
   , TestText nvarchar(255)
);

INSERT INTO TestTable1 (TestText) VALUES ('This is table 1 in database 1');


USE Test2;
GO
CREATE TABLE TestTable2
(
   ID INT NOT NULL PRIMARY KEY CONSTRAINT PK_TestTable2 IDENTITY(1,1)
   , TestText nvarchar(255)
);

INSERT INTO TestTable2 (TestText) VALUES ('This is table 2 in database 2');


SELECT * FROM Test1.dbo.TestTable1
UNION ALL
SELECT * FROM Test2.dbo.TestTable2;

輸出是:

ID  TestText
1   This is table 1 in database 1
1   This is table 2 in database 2

由於您在評論中指出您可能想要完全替換前端,請查看Visual Studio Lightswitch。我目前正在使用它,它很棒……對於成熟的 .NET 開發人員來說太簡單了,但對於無需開發團隊就可以在某些數據上投入前端非常有用。

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