SQL Server Express

✍ dations ◷ 2025-02-25 23:07:10 #SQL Server Express

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提供了付费的完整版本的多项功能,然而其技术限制使之无法适用于大规模的部署。这两个版本的差异在于:

MSDE有一个并发工作负债监控器并限制在少量用户并发访问,SQL Server Express没有这个并发限制。

SQL Server Express包括了几个数据库管理的图形用户界面工具:

MSDE 没有管理接口

SQL Server Express不包括全功能标准版的几个工具:

SQL Server Express的各版本是可以远程连接的,但需要用户做一定的配置。

SQL Server Express 2017 或 2019,SQL Server Express有三款安装版本:

使用 Microsoft SQL Server 安装向导的"实例名"页,可指定创建默认实例还是创建 SQL Server Express 命名实例。除非您选择默认实例,否则 SQL Server Express 将始终安装命名实例 (SQLExpress)。如果选择"默认实例",而计算机上已经存在默认实例,则 SQL Server 安装程序将升级该默认实例。请选择此选项来安装 SQL Server Express 的默认实例。一台计算机只能承载一个默认实例。

注意:默认实例名为 MSSQLSERVER;它不需要客户端指定实例名称即可创建连接。

命名实例需遵守:

数据库实例的文件存储位置一般在:C:Program FilesMicrosoft SQL ServerMSSQL15.SQLEXPRESSMSSQLDATA

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.

注意,数据库管理员账号sa默认是登录锁定的。需要在Microsoft SQL Server Management Studio的Security->Logins->sa->Status页面:

$sqlcmd -S thisisaserver.com -U usernamePassword:1> SELECT name FROM SYSOBJECTS WHERE xtype = 'U'2> GOname--------EquitySecMstr(1 rows affected)1>

LocalDB

LocalDB的全称是Microsoft SQL Server Express LocalDB。

从Microsoft下载的SqlLocalDB.msi约54MB。也可以使用Microsoft SQL Server Express的安装程序,在第一页选择第3项“Download Media”,随后在下一页选择第3项“localDB(54MB)”即可下载。Visual Studio 2019 installer内置了SQL Server 2016 Express LocalDB的安装选项。

命令行工具SqlLocalDB,用于创建和管理LocalDB的实例。

C:> SqlLocalDb info	#输出默认实例名字:MSSQLLocalDB			#创建一个实例(相当于一个server):C:> SqlLocalDb create "MyInstance"	#输出:LocalDB instance "MyInstance" created with version 15.0.2000.5.C:> sqllocaldb info "MyInstance"#输出:#Name:               MyInstance#Version:            15.0.2000.5#Shared name:#Owner:              MyDomainNameMyUserName#Auto-create:        No#State:              Stopped#Last start time:    2022/3/9 19:04:41#Instance pipe name:C:> sqllocaldb start "MyInstance"#输出: LocalDB instance "MyInstance" started.#类似的,可以有:#C:> SqlLocalDb stop "MyInstance"#C:> SqlLocalDb delete "MyInstance"

系统数据库文件存储于本地AppData路径下,通常为C:Users<user>AppDataLocalMicrosoftMicrosoft SQL Server Local DBInstances

LocalDB 是在Windows当前用户的用户进程中运行。而SQL Server Express是作为Windows Service运行。所以,LocalDB的数据存储是Windows用户私有的。在Visual Studio启动IIS Express也是当前用户的用户进程执行,所以可以访问LocalDB。

把私有的数据存储变为共享实例。例如,原存储为“(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  from windows;exec sp_addsrvrolemember N'IIS APPPOOLASP.NET v4.0', sysadmin

SQLCMD使用的连接字符串

C:>sqlcmd -S "(localdb)MyInstance"就可以在交互环境下执行查询:

SELECT @@VERSION;GOCREATE DATABASE blat;GOUSE blat;GOCREATE TABLE dbo.splunge(Mort int);GOINSERT dbo.Splune(Mort) VALUES(1);SELECT * FROM dbo.splunge;GO

Microsoft SQL Server Management Studio连接LocalDB

Server Name使用(localdb)MyInstance

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;namespace Connection{    class Program    {        static void Main(string args)        {            //构造连接字符串            SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();            connStr.DataSource = @".SQLEXPRESS";            connStr.InitialCatalog = "master";            connStr.IntegratedSecurity = true;            SqlConnection conn = new SqlConnection();//创建连接对象            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文件。

using System;using System.Collections.Generic;using System.Linq;using System.Data;using System.Data.SqlClient;namespace ConsoleApp{    class Program    {        static void Main(string args)        {            System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection();            connection.ConnectionString =                @"Data Source=(localdb)MSSQLLocalDB;AttachDbFilename=D:appsDocumentsNORTHWND.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);            }            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Employees", connection);            DataTable table = new DataTable();            adapter.Fill(table);            var result = (from row                          in table.Rows.Cast<DataRow>()                          select                          new { ID = (int)row, LastName = (string)row, FirstName = (string)row });            result.ToList().ForEach(x => Console.WriteLine($"{x.ID},{x.LastName},{x.FirstName}"));        }    }}

对于较低版本,如SQL Server Express 2005的mdf文件,可以直接用如下connection string打开访问(可能需要administrator权限):

using System;using System.Collections.Generic;using System.Linq;using System.Data;using System.Data.SqlClient;namespace ConsoleApp{    class Program    {        static void Main(string args)        {            System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection();            connection.ConnectionString =                @"Data Source=.SQLEXPRESS;AttachDbFilename=D:appsDocumentsNORTHWND.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);            }        }    }}

Python

需要安装pymssql包

import pymssqluser = 'sa'pwd = '123456'server = '10.219.55.186'port = 1433db = 'myDatabase'sql_stmt = "SELECT name FROM SYSOBJECTS WHERE xtype = 'U'"conn = pymssql.connect(server, user, pwd, db)cursor = conn.cursor(as_dict=False)cursor.execute(sql_stmt)row = cursor.fetchone()while row:    print("%s" % (row))    row = cursor.fetchone()conn.close()


使用sqlalchemy的ORM:

相关