在一台Windows Server 2019VM上安裝SQL Server 2017 Express的畫面縮圖。 | |
| 開發者 | 微软 |
|---|---|
| 当前版本 |
|
| 编程语言 | C语言、C++ |
| 操作系统 | Microsoft Windows及Linux |
| 平台 | IA-32或IA-64 > 512 MB RAM .NET Framework 4.0(英语:.NET Framework 4.0)[2] |
| 语言 | 英文、中文、法文、德文、意大利文、日文、韓文、巴西葡文、俄文及西班牙文 |
| 类型 | 关系数据库管理系統 |
| 许可协议 | 专有软件[3] |
| 网站 | www |
Microsoft SQL Server Express是微软公司所開發的关系数据库產品SQL Server的免費下載版本,可自由下載、分發(需經註冊)及使用。這個版本的設計是專門為嵌入式系统或較小型的程式而設計。本產品可遡源至過往隨同SQL Server 2000軟件分發的Microsoft Database Engine (MSDE),用以讓程式開發者在其測試其程式時建立一個系統需求較低的測試環境。自SQL Server 2005開始,本產品改用現時的名稱。
它繼承了多數的SQL Server功能與特性,像是Transact-SQL、SQL CLR等,相當適合使用在小型的網站,或者是小型的桌面型應用程式,它也可以和 SQL Server 整合,作為資料庫複製(英语:Replication (computing)#DATABASE)(Replication)的訂閱端。
SQL Server Express提供了付費的完整版本的多項功能[4],然而其技術限制使之無法適用於大規模的部署。這兩個版本的差異在於:
MSDE有一个并发工作负债监控器并限制在少量用户并发访问,SQL Server Express没有这个并发限制[9]。
SQL Server Express包括了几个数据库管理的图形用户界面工具:
MSDE則沒有管理介面
SQL Server Express不包括全功能标准版的几个工具:
SQL Server Express的各版本是可以远程连接的,但需要用户做一定的配置。
| 版本號碼 | 發行日期 | 主流支援完結日期 | 延伸支援完結日期 | 支援作業系統 |
|---|---|---|---|---|
| SQL Server 2005 Express Edition | 2005-11-07[11] | 2011-04-12[12] | 2016-04-12[12] | Windows 2000 Service Pack 4, Windows XP Service Pack 2, Windows Server 2003 Service Pack, Windows 7 Service Pack 1 (only SQL Server 2005 Express Edition SP4)[13] |
| SQL Server 2008 Express | 2009-02-08[14] | 2014-07-08[15] | 2019-07-09[15] | Windows XP Service Pack 2, Windows XP Service Pack 3, Windows Vista, Windows Vista Service Pack 1, Windows Server 2003 Service Pack 2, Windows Server 2008[16] |
| SQL Server 2008 R2 Express | 2010-04-16[17] | 2014-07-08[18] | 2019-07-09[18] | Windows XP, Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2[19] |
| SQL Server 2012 Express | 2012-05-14[20] | 2017-07-11[21] | 2022-07-12[21] | Windows Vista Service Pack 2, Windows 7, Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2008,[22] Windows Server 2008 R2, Windows Server 2008 R2 SP1, Windows Server 2012, Windows Server 2012 R2[23] |
| SQL Server 2014 Express | 2014-04-01[24] | 2019-07-09[25] | 2024-07-09[25] | Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows 10, Windows Server 2008 SP2,[26] Windows Server 2008 R2 SP1, Windows Server 2012, Windows Server 2012 R2[27] |
| SQL Server 2016 Express | 2016-06-01[28] | 2021-07-13[29] | 2026-07-14[29] | Windows 8, Windows 8.1, Windows 10, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016 |
| SQL Server 2017 Express | 2017-09-29[30] | 2022-10-11[31] | 2027-10-12[31] | Windows 8, Windows 8.1, Windows 10, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016*, Red Hat Enterprise Linux 7.3 or 7.4, SUSE Enterprise Linux Server v12 SP2, Ubuntu 16.04LTS, Docker Engine 1.8+ (on Windows, Mac, or Linux) |
SQL Server Express 2017 或 2019,SQL Server Express有三款安裝版本:
SQL Server包括Express版本,有3种到数据库服务器的连接(connection)方式:
其中后两种需要在SQL Server Configuration Manager软件中,SQL Server Network Configuration下的“Protocols for SQLEXPRESS”,把Nameed Pipes与TCP/IP手工置为Enable。对于第三种,还需要在上述的配置时,在TCP/IP Properties的IP Addresses中把IPALL的“TCP Port”设为1433.
$sqlcmd -S thisisaserver.com -U usernamePassword:1> SELECT name FROM SYSOBJECTS WHERE xtype = 'U'2> GOname--------EquitySecMstr(1 rows affected)1>
LocalDB的全称是Microsoft SQL Server Express LocalDB。
从Microsoft下载的SqlLocalDB.msi约54MB。也可以使用Microsoft SQL Server Express的安装程序,在第一页选择第3项“Download Media”,随后在下一页选择第3项“localDB(54MB)”即可下载。
命令行工具SqlLocalDB,用于创建和管理LocalDB的实例[33]。
C:\>SqlLocalDbinfo#输出默认实例名字:MSSQLLocalDB#创建一个实例(相当于一个server):C:\>SqlLocalDbcreate"MyInstance"#输出:LocalDB instance "MyInstance" created with version 15.0.2000.5.C:\>sqllocaldbinfo"MyInstance"#输出:#Name: MyInstance#Version: 15.0.2000.5#Shared name:#Owner: MyDomainName\MyUserName#Auto-create: No#State: Stopped#Last start time: 2022/3/9 19:04:41#Instance pipe name:C:\>sqllocaldbstart"MyInstance"#输出: LocalDB instance "MyInstance" started.#类似的,可以有:#C:\> SqlLocalDb stop "MyInstance"#C:\> SqlLocalDb delete "MyInstance"
系统数据库文件存储于本地AppData路径下,通常为C:\Users\<user>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\。
LocalDB 是在Windows当前用户的用户进程中运行。而SQL Server Express是作为Windows Service运行。所以,LocalDB的数据存储是Windows用户私有的。在Visual Studio启动IIS Express也是当前用户的用户进程执行,所以可以访问LocalDB。[34]
把私有的数据存储变为共享实例。例如,原存储为“(localdb)\v11.0”:
sqllocaldb share v11.0 IIS_DB
现在为公共名字IIS_DB。该电脑所有用户均可以用“(localdb)\.\IIS_DB”访问该实例。注意,名字中的前缀“\.”表示这是共享实例名字。即其保存的文件的路径不会放在特定用户的documents目录中。连接字符串可为:
Data Source=(localdb)\.\IIS_DB;Initial Catalog=OldFashionedDB;Integrated Security=True
在Visual Studio中通过 SQL Server Object Explorer 连接上述localDB实例,在query窗口执行下述脚本可以授予“”账号数据实例的管理员权限:
create login [IIS APPPOOL\ASP.NET v4.0] from windows;exec sp_addsrvrolemember N'IIS APPPOOL\ASP.NET v4.0', sysadmin
C:\>sqlcmd -S "(localdb)\MyInstance"就可以在交互环境下执行查询:
SELECT@@VERSION;GOCREATEDATABASEblat;GOUSEblat;GOCREATETABLEdbo.splunge(Mortint);GOINSERTdbo.Splune(Mort)VALUES(1);SELECT*FROMdbo.splunge;GO
Server Name使用(localdb)\MyInstance
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;namespaceConnection{classProgram{staticvoidMain(string[]args){//构造连接字符串SqlConnectionStringBuilderconnStr=newSqlConnectionStringBuilder();connStr.DataSource=@".\SQLEXPRESS";connStr.InitialCatalog="master";connStr.IntegratedSecurity=true;SqlConnectionconn=newSqlConnection();//创建连接对象conn.ConnectionString=connStr.ConnectionString;//设置连接字符串conn.Open();//打开连接if(conn.State==ConnectionState.Open){Console.WriteLine("Database is linked.");Console.WriteLine("\nDataSource:{0}",conn.DataSource);Console.WriteLine("Database:{0}",conn.Database);Console.WriteLine("ConnectionTimeOut:{0}",conn.ConnectionTimeout);}conn.Close();//关闭连接conn.Dispose();//释放资源if(conn.State==ConnectionState.Closed){Console.WriteLine("\nDatabase is closed.");}Console.Read();}}}
对于较高版本,如SQL Server Express大于版本2010的,可以通过在Visual Studio,依次点击“视图”(菜单栏)->“服务器资源管理器(Server Explorer)”,进入“服务器资源管理器”窗口。右键点击“数据连接(Data Connection)”,在弹出的上下文菜单中选择“添加连接(Add Connection)”,在弹出的窗口中将Data Source选择为Microsoft SQL Server,“服务器名”设置为(LocalDb)\MSSQLLocalDB,附加服务器文件为具体的mdf文件并点击确定。此时,通过Microsoft SQL Server(SQL Client)方式访问指定的mdf文件。
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Data;usingSystem.Data.SqlClient;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){System.Data.SqlClient.SqlConnectionconnection=newSystem.Data.SqlClient.SqlConnection();connection.ConnectionString=@"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=D:\apps\Documents\NORTHWND.mdf;Integrated Security = True;Connect Timeout = 30;";//@"Data Source=(localdb)\MyInstance;InitialCatalog =blat;Integrated Security = True;Connect Timeout = 30;";connection.Open();if(connection.State==ConnectionState.Open){Console.WriteLine("Database is linked.");Console.WriteLine("DataSource:{0}",connection.DataSource);Console.WriteLine("Database:{0}",connection.Database);Console.WriteLine("ConnectionTimeOut:{0}",connection.ConnectionTimeout);}SqlDataAdapteradapter=newSqlDataAdapter("SELECT * FROM Employees",connection);DataTabletable=newDataTable();adapter.Fill(table);varresult=(fromrowintable.Rows.Cast<DataRow>()selectnew{ID=(int)row[0],LastName=(string)row[1],FirstName=(string)row[2]});result.ToList().ForEach(x=>Console.WriteLine($"{x.ID},{x.LastName},{x.FirstName}"));}}}
对于较低版本,如SQL Server Express 2005的mdf文件,可以直接用如下connection string打开访问(可能需要administrator权限):
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Data;usingSystem.Data.SqlClient;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){System.Data.SqlClient.SqlConnectionconnection=newSystem.Data.SqlClient.SqlConnection();connection.ConnectionString=@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\apps\Documents\NORTHWND.mdf;Integrated Security = True;Connect Timeout = 30;";connection.Open();if(connection.State==ConnectionState.Open){Console.WriteLine("Database is linked.");Console.WriteLine("DataSource:{0}",connection.DataSource);Console.WriteLine("Database:{0}",connection.Database);Console.WriteLine("ConnectionTimeOut:{0}",connection.ConnectionTimeout);}}}}
需要安装pymssql包
fromsqlalchemyimportcreate_engineimportpandasaspduser='username'pwd='password'url='thisisaserver.com'port=1433db='database'engine=create_engine(f'mssql+pymssql://{user}:{pwd}@{url}:{port}/{db}')sql_stmt="SELECT name FROM SYSOBJECTS WHERE xtype = 'U'"pd.read_sql_query(sql_stmt,engine)