当前位置:首页 » 编程语言 » sqlserver获取

sqlserver获取

发布时间: 2022-06-22 11:22:37

㈠ 如何获取sql Server数据库元数据

如何获取SQL Server数据库元数据

元数据简介
元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆目录卡和名片等都能够看作是元数据。在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意义。比如在管理、维护 SQL Server 或是研发数据库应用程式的时候,我们经常要获取一些涉及到数据库架构的信息:

某个数据库中的表和视图的个数连同名称;
某个表或视图中列的个数连同每一列的名称、数据类型、长度、精度、描述等;
某个表上定义的约束;
某个表上定义的索引连同主键/外键的信息。
下面我们将介绍几种获取元数据的方法。

获取元数据

使用系统存储过程和系统函数访问元数据

获取元数据最常用的方法是使用 SQL Server 提供的系统存储过程和系统函数。

系统存储过程和系统函数在系统表和元数据之间提供了一个抽象层,使得我们不用直接查询系统表就能获得当前数据库对象的元数据。

常用的和元数据有关的系统存储过程有以下一些:

系统存储过程

sp_columns 返回指定表或视图的列的周详信息。
sp_databases 返回当前服务器上的任何数据库的基本信息。
sp_fkeys 若参数为带有主键的表,则返回包含指向该表的外键的任何表;若参数为带有外键的表名,则返回任何同过主键/外键关系和该外键相关联的任何表。
sp_pkeys 返回指定表的主键信息。
sp_server_info 返回当前服务器的各种特性及其对应取值。
sp_sproc_columns 返回指定存储过程的的输入、输出参数的信息。
sp_statistics 返回指定的表或索引视图上的任何索引连同统计的信息。
sp_stored_proceres 返回当前数据库的存储过程列表,包含系统存储过程。
sp_tables 返回当前数据库的任何表和视图,包含系统表。
常用的和元数据有关的系统函数有以下一些:

系统函数

COLUMNPROPERTY 返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。
COL_LENGTH 返回指定数据库的指定属性值,如是否处于只读模式等。
DATABASEPROPERTYEX 返回指定数据库的指定选项或属性的当前配置,如数据库的状态、恢复模型等。
OBJECT_ID 返回指定数据库对象名的标识号
OBJECT_NAME 返回指定数据库对象标识号的对象名。
OBJECTPROPERTY 返回指定数据库对象标识号的有关信息,如是否为表,是否为约束等。
fn_listextendedproperty 返回数据库对象的扩展属性值,如对象描述、格式规则、输入掩码等。
由于我们无法直接利用到存储过程和函数的返回结果,因此只有在我们关心的只是查询的结果,而无需进一步利用这些结果的时候,我们会使用系统存储过程和系统函数来查询元数据。

例如,假如要获得当前服务器上任何数据库的基本信息,我们能够在查询分析器里面运行:

EXEC sp_databases
GO
在返回结果中我们能够看到数据库的名称、大小及备注等信息。

但是假如要引用这部分信息,或存储这部分信息以供后面使用,那么我们必须借助中间表来完成这个操作:

CREATE TABLE #sp_result
(
DATABASE_NAME sysname,
DATABASE_SIZE int,
REMARKS varchar(254) NULL
)
GO
INSERT INTO #sp_result
EXEC ('sp_databases')
GO
使用信息架构视图访问元数据

信息架构视图基于 SQL-92 标准中针对架构视图的定义,这些视图单独于系统表,提供了关于 SQL Server 元数据的内部视图。信息架构视图的最大长处是,即使我们对系统表进行了重要的修改,应用程式也能够正常地使用这些视图进行访问。因此对于应用程式来说,只要是符合 SQL-92 标准的数据库系统,使用信息架构视图总是能够正常工作的。

信息架构视图

INFORMATION_SCHEMA.CHECK_CONSTRAINTS:返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。
INFORMATION_SCHEMA.COLUMNS:返回当前数据库中当前用户能够访问的任何列及其基本信息。
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE:返回当前数据库中定义了约束的任何列及其约束名。
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE:返回当前数据库中定义了约束的任何表及其约束名。
INFORMATION_SCHEMA.KEY_COLUMN_USAGE:返回当前数据库中作为主键/外键约束的任何列。
INFORMATION_SCHEMA.SCHEMATA:返回当前用户具备权限的任何数据库及其基本信息。
INFORMATION_SCHEMA.TABLES:返回当前用户具备权限的当前数据库中的任何表或视图及其基本信息。
INFORMATION_SCHEMA.VIEWS:返回当前数据库中的当前用户能够访问的视图及其任何者、定义等信息。
由于这些信息架构都是以视图的方式存在的,因此我们能够很方便地获得并利用需要的信息。

例如,我们要得到某个表有多少列,能够使用以下语句:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='mytable'
使用系统表访问元数据

虽然使用系统存储过程、系统函数和信息架构视图已能够为我们提供了相当丰富的元数据信息,但是对于某些特别的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL Server 将任何数据库对象的信息均存放在系统表中,作为 SQL Server 的管理、研发人员,了解各个系统表的作用将有助于我们了解 SQL Server 的内在工作原理。

SQL Server 的系统表很多,其中最常用的和元数据查询有关的表有如下一些:

syscolumns 存储每个表和视图中的每一列的信息连同存储过程中的每个参数的信息。
syscomments 存储包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的原始 SQL 文本语句。
sysconstraints 存储当前数据库中每一个约束的基本信息。
sysdatabases 存储当前服务器上每一个数据库的基本信息。
sysindexes 存储当前数据库中的每个索引的信息。
sysobjects 存储数据库内的每个对象(约束、默认值、日志、规则、存储过程等)的基本信息。
sysreferences 存储任何包括 FOREIGN KEY 约束的列。
systypes 存储系统提供的每种数据类型和用户定义数据类型的周详信息。
将系统存储过程、系统函数、信息架构视图和系统表结合使用,能够方便地让我们获得任何需要的元数据信息。

示例:

1、 获得当前数据库任何用户表的名称。

SELECT OBJECT_NAME (id)
FROM sysobjects
WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0
其中主要用到了系统表 sysobjects连同其属性 xtype,更有就是用到了 OBJECTPROPERTY 系统函数来判断是不是安装 SQL Server 的过程中创建的对象。

2、获得指定表上任何的索引名称。

SELECT name FROM sysindexes
WHERE id = OBJECT_ID ('mytable') AND indid > 0
综合实例

下面给出了一个存储过程,他的作用是自动将当前数据库的用户存储过程加密

DECLARE @sp_name nvarchar(400)
DECLARE @sp_content nvarchar(2000)
DECLARE @asbegin int
declare @now datetime
select @now = getdate()
DECLARE sp_cursor CURSOR FOR
SELECT object_name(id)
FROM sysobjects
WHERE xtype = 'P'
AND type = 'P'
AND crdate < @now
AND OBJECTPROPERTY(id, 'IsMSShipped')=0
OPEN sp_cursor
FETCH NEXT FROM sp_cursor
INTO @sp_name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sp_content = text FROM
syscomments WHERE id = OBJECT_ID(@sp_name)
SELECT @asbegin =
PATINDEX ( '%AS' + char(13) + '%', @sp_content)
SELECT @sp_content =
SUBSTRING(@sp_content, 1, @asbegin - 1)
+ ' WITH ENCRYPTION AS'
+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))
SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'
EXEC sp_executesql @sp_name
EXEC sp_executesql @sp_content
FETCH NEXT FROM sp_cursor
INTO @sp_name
END
CLOSE sp_cursor
DEALLOCATE sp_cursor
该存储过程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存储过程的 SQL 定义语句,将 AS 修改为了 WITH ENCRYPTION AS,从而达到了加密存储过程的目的。本存储过程在 SQL Server 2000 上通过。

㈡ 如何在sqlserver中获取表的所有列信息

1.查询数据库中的所有数据库名:
SELECT Name FROM Master..SysDatabases ORDER BY Name

2.查询某个数据库中所有的表名:
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name

3.查询表结构信息:
SELECT (case when a.colorder=1 then d.name else null end) 表名,
a.colorder 字段序号,a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
(case when (SELECT count(*) FROM sysobjects
WHERE (name in (SELECT name FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
AND (xtype = 'PK'))>0 then '√' else '' end) 主键,b.name 类型,a.length 占用字节数,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,(case when a.isnullable=1 then '√'else '' end) 允许空,
isnull(e.text,'') 默认值,isnull(g.[value], ' ') AS [说明]
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
where b.name is not null
--WHERE d.name='要查询的表' --如果只查询指定表,加上此条件
order by a.id,a.colorder

㈢ sql server 怎么获取表中的数据

(1)启动Microsoft SQL Server Management Studio程序 (2)按提示操作进入系统 (3)选择那个建好表的数据库 (4)点击鼠标右键,会弹出一个菜单,选择菜单命令:任务/导出数据

㈣ 如何获取SQL server数据库的连接字符串

步骤:
1、新建一个txt文本文档,然后把后缀名改为udl
2、打开 新建文本文档.udl ,并选择相应的数据库进行连接,之后点击 “测试连接”,成功之后关闭。
3、将后缀名改回txt,打开txt文本文档就可以看到已经创建好了数据库连接字符串了。

㈤ sqlserver中怎样获取名称权限

使用SQL语句。
使用SQL语句获取SQLServer数据库登录用户权限。
数据库用户是数据库级别的主体,被用于访问数据库层面的对象。每一个数据库用户都必须要一个与之对用的登录名。数据库用户的信息存在数据库中,而登录名存在实例级别的Master数据库中(但SQL SERVER2012的Contained Database允许将登录名也存在数据库级别)。通常来说,数据库层级的用户可以和映射的登录名不一致,但由于这种做法会引起混淆,因此并不推荐。

㈥ 如何在SqlServer中获取前端连接的IP地址,计算机名等信息

如果你对SqlServer的系统函数或视图不太了解,这个功能看起来好像比较复杂,而实际上, SqlServer的动态管理视图已经给我们提供了这些信息,下面我们来看两个动态管理视图。1、Sys.dm_exec_Sessions 这个视图中提供了所有连接sqlserver的客户端的一些信息,下面是Sys.dm_exec_Sessions返回的列:列名数据类型 说明Session_idsmallint标识与每个活动主连接关联的会话。login_timedatetime建立会话的时间。host_namenvarchar(128)与会话关联的主机。program_namenvarchar(128)与会话关联的程序。host_process_idint与会话关联的进程 ID。client_versionint客户端连接到服务器所用的接口版本。client_interface_namenvarchar(32)客户端连接到服务器所用的接口名称。security_idvarbinary(85)与登录名关联的 Microsoft Windows 安全 ID。login_namenvarchar(128)与会话关联的 SQL 登录名。nt_domainnvarchar(128)从中建立会话连接的域。nt_user_namenvarchar(128)与会话关联的用户名。statusnvarchar(30)会话的状态。可能的值: 1,运行 - 当前正在运行一个或多个请求 2,睡眠 - 当前没有运行任何请求 3,休眠 - 会话处于登录前状态 context_infovarbinary(128)会话的 CONTEXT_INFO 值。cpu_timeint该会话所占用的 CPU 时间(毫秒)。memory_usageint该会话所占用的 8 KB 内存页数。total_scheled_timeint计划内含请求的会话的执行所耗用的总计时间(毫秒)。total_elapsed_timeint自会话建立以来已耗用的时间(毫秒)。endpoint_idint与会话关联的端点的 ID。last_request_start_timedatetime最近一次会话请求的开始时间。这包括当前正在执行的请求。last_request_end_timedatetime最近一次会话请求的完成时间。readsbigint在该会话期间该会话中的请求所执行的读取次数。Writesbigint在该会话期间该会话中的请求所执行的写入次数。logical_readsbigint已对该会话执行的逻辑读取数。is_user_processbit如果会话是系统会话,则为 0。否则,为 1。text_sizeint会话的 TEXTSIZE 设置。languagenvarchar(128)会话的 LANGUAGE 设置。date_formatnvarchar(3)会话的 DATEFORMAT 设置。date_firstsmallint会话的 DATEFIRST 设置。quoted_identifierbit会话的 QUOTED_IDENTIFIER 设置。arithabortbit会话的 ARITHABORT 设置。ansi_null_dflt_onbit会话的 ANSI_NULL_DFLT_ON 设置。ansi_defaultsbit会话的 ANSI_DEFAULTS 设置。ansi_warningsbit会话的 ANSI_WARNINGS 设置。ansi_paddingbit会话的 ANSI_PADDING 设置。ansi_nullsbit会话的 ANSI_NULLS 设置。concat_null_yields_nullbit会话的 CONCAT_NULL_YIELDS_NULL 设置。transaction_isolation_levelsmallint会话的事务隔离级别。 0 = 未指定 1 = 未提交读取 2 = 已提交读取 3 = 可重复 4 = 可序列化 5 = 快照lock_timeoutint会话的 LOCK_TIMEOUT 设置。该值以毫秒计。deadlock_priorityint会话的 DEADLOCK_PRIORITY 设置。row_countbigint到目前为止会话返回的行数。prev_errorint会话返回的最近一个错误的 ID。比如说,我们要看那些主机有连接到了sqlserver服务器,可以使用下面的sql语句: select distinct host_name from sys.dm_exec_Sessions要看那些用户已连接到sqlserver服务器: select distinct login_name from sys.dm_exec_Sessions当然,利用上面的列,我们可以获得更多想要的客户端信息2、Sys.dm_exec_connections 这个视图返回了连接sqlserver服务器上面的每个连接的详细信息,下面是Sys.dm_exec_connections返回的列:列名数据类型 说明Session_idint标识与此连接关联的会话。most_recent_Session_idint显示与此连接关联的最近请求的会话 ID。connect_timedatetime连接建立时的时间戳。net_transportnvarchar(40)说明该连接使用的物理传输协议。protocol_typenvarchar(40)指定负载的协议类型。此参数当前可区分 TDS (TSQL) 和 SOAP。protocol_versionint与此连接关联的数据访问协议的版本。endpoint_idint与此连接关联的端点的唯一标识符。此 endpoint_id 可用于查询 sys.endpoints 视图。encrypt_optionnvarchar(40)说明是否为此连接启用了加密的布尔值。auth_schemenvarchar(40)指定与此连接一起使用的 SQL Server/NT 身份验证。node_affinitysmallint显示与此连接关联的 SOS 节点。num_readsint此连接中已发生的读包次数。num_writesint此连接中已发生的写数据包次数。last_readdatetime此连接中上一次发生读操作的时间戳。last_writedatetime此连接中上一次发生写操作的时间戳。net_packet_sizeint用于信息和数据的网络包的大小。client_net_addressvarchar(40)与此服务器连接的客户端的主机地址。client_tcp_portint与该连接关联的客户机上的端口号。local_net_addressvarchar(40)显示此连接的目标服务器的 IP 地址。只对使用 TCP 传输提供程序的连接可用。

㈦ 如何查看和获取SQL Server实例名

一、查看实例名时可用

1、服务—SQL Server(实例名),默认实例为(MSSQLSERVER)

或在连接企业管理时-查看本地实例

2、通过注册表
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL
Server/InstalledInstance

3、用命令
sqlcmd/osql
sqlcmd -L
sqlcmd -Lc
osql
-L

获取可用实例,以下举一个例子,根据自己情况改

复制代码
代码如下:

DECLARE @Table TABLE ( instanceName
sysname NULL)

insert @Table EXEC sys.xp_cmdshell 'sqlcmd -Lc'

--LEFT(@@serverName,CHARINDEX('/',@@serverName+'/')-1) 替代为本机名就行了 ,
根据实例命名规则判断

SELECT * FROM @Table WHERE instanceName LIKE LEFT( @@serverName , CHARINDEX
( '/' , @@serverName + '/' )- 1)+ '%'

二、

--1.
SELECT
SERVERPROPERTY('InstanceName')

--2
sp_helpserver

--3
select
@@SERVERNAME

--4
SELECT * FROM
SYS.SYSSERVERS

--5
SELECT * FROM
SYS.SERVERS

三、

EXECUTE xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE/Microsoft/Microsoft SQL
Server/Instance Names/SQl',
@value_name='MSSQLSERVER'

四、

Select Case
When SERVERPROPERTY ('InstanceName') Is Null Then
@@SERVERNAME
Else SERVERPROPERTY ('InstanceName')
End

五、在本地或网络得到所有实例名

1、You can do with registry reading , like my code

复制代码
代码如下:

using System;
using Microsoft.Win32;

namespace SMOTest
{
class Program
{
static void
Main()
{
RegistryKey rk =
Registry.LocalMachine.OpenSubKey(@"SOFTWARE/Microsoft/Microsoft SQL
Server");
String[] instances =
(String[])rk.GetValue("InstalledInstances");
if (instances.Length
> 0)
{
foreach (String element in
instances)
{
if (element ==
"MSSQLSERVER")

Console.WriteLine(System.Environment.MachineName);

else
Console.WriteLine(System.Environment.MachineName + @"/"
+ element);
}
}
}

}
}

2、You can use SQLDMO.dll to retrieve the list of SQL
Server instances. The SQLDMO.dll can be found from the "C:/Program
Files/Microsoft SQL Server/80/Tools/Bin" folder. Refer this assembly in your
project and the following snippet would return a List Object containing the sql
server instances.

复制代码
代码如下:

public static List GetSQLServerInstances()

{
NameList sqlNameList = null;
Application app = null;

var sqlServers = new List();
try
{
app = new
ApplicationClass();
sqlNameList = app.ListAvailableSQLServers();
foreach
(string sqlServer in
sqlNameList)
sqlServers.Add(sqlServer);
}
catch(Exception
ex)
{
//play with the exception.
}
finally
{
if (sqlNameList
!= null)
sqlNameList = null;
if (app != null)
app =
null;
}
return sqlServers;
}

㈧ 获取SQL Server服务器列表的几种方法

一、 SQL DMO描述:SQL Distributed Management Objects(SQL分布式管理对象),存在于SQLDMO.dll文件中,实际上是一个COM 对象,通过调用SQL DMO的ListAvailableSQLServers方法取得。速度:中调用示例:GetSQLServerList(ListBox1.items);代码:uses ComObj; function GetSQLServerList(var AList: TStrings): Boolean;var SQLServerApp: Variant; ServerList: Variant; i: Integer;begin Result := True; try SQLServerApp := CreateOleObject('SQLDMO.Application'); ServerList := SQLServerApp.ListAvailableSQLServers; for i := 1 to ServerList.Count do AList.Add(ServerList.Item(i)); SQLServerApp := Unassigned; ServerList := Unassigned; except Result := False; end;end; 二、 NetServerEnum描述:网络服务函数,存在于NetApi32.dll文件中;通过NetServerEnum函数可取得装有SQL Server服务端的计算机列表,只装有SQL Server客户端的计算机将不会被列举其中;如果一台计算机的SQL Server服务刚刚启动,那么此函数将会过很久才能取到该计算机。

㈨ sql server 如何获取当前操作的数据库名

1、首先我们打开电脑里的sql server软件。

热点内容
python3graphics 发布:2025-02-05 21:36:57 浏览:511
为什么英雄联盟一个服务器进不去 发布:2025-02-05 21:36:12 浏览:182
服务器搭建网站开发教材 发布:2025-02-05 21:31:57 浏览:567
pythonrose 发布:2025-02-05 21:31:46 浏览:923
php数组从小到大排序 发布:2025-02-05 21:26:01 浏览:324
单片机存储器扩展 发布:2025-02-05 21:17:35 浏览:966
sqler图 发布:2025-02-05 21:10:58 浏览:630
网络编程android 发布:2025-02-05 21:05:49 浏览:346
python时间毫秒数 发布:2025-02-05 20:51:32 浏览:331
clash安卓如何切换节点 发布:2025-02-05 20:48:20 浏览:890