Server系统函数-全面解析SQL (server是什么意思)

技术教程 2025-04-20 20:28:42 浏览
系统函数

学习SQL数据库,SQL Server系统函数是不能不提到的,下面就将为您介绍几种常见的SQL Server系统函数,希望对您能有所帮助。

系统变量

@@CONNECTIONS 返回自上次启动 Microsoft® SQL Server™ 以来连接或试图连接的次数。

@@MAX_CONNECTIONS 返回 Microsoft® SQL Server™ 上允许的同时用户连接的***数。返回的数不必为当前配置的数值。

系统存储过程

提供关于当前 Microsoft® SQL Server™ 用户和进程的信息。可以筛选返回的信息,以便只返回那些不是空闲的进程。

列出所有活动的用户:SP_WHO ‘active’

列出某个特定用户的信息:SP_WHO ‘sa’

server是什么意思 系统表

Sysprocesses

sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中。

Sysperfinfo

包括一个 Microsoft® SQL Server™ 表示法的内部性能计数器,可通过 Windows NT 性能监视器显示.

有人提议说为了获取SQL Server的当前连接数:使用如下SQL:

SELECT COUNT(*) AS CONNECTIONS FROM master..sysprocesses

个人认为不对,看看.sysprocesses的login_time列就可看出.

另外一个方面是进程不能和连接相提并论,他们是一对一的关系吗,也就是说一个进程就是一个连接?一个连接应该有多个进程的,所以连接和进程之间的关系应该是1:n的.

因为sysprocesses列出的进程包含了系统进程和用户进程,为了得到用户连接,可以使用如下SQL:

SELECT cntr_value AS User_Connections FROM master..sysperfinfo as pWHERE p.object_name = ‘SQLServer:General Statistics’ And p.counter_name = ‘User Connections’

个人还是认为不对,因为它是一个计数器,可能会累加的.

全面解析SQL

还有一种方案是利用如下SQL:

select connectnum=count(distinct net_address)-1 from master..sysprocesses

理由是net_address是访问者机器的网卡值,这个总该是唯一的吧.但是看起来得到的是所有时间内的连接数。

【编辑推荐】

带您了解SQL Server系统视图

SQL Server时间查询语句实例

SQL Server查询语句的设计

带您了解SQL Server分页查询语句

SQL Server连接错误的处理方法


什么是SQL Server的确定性函数和不确定性函数

只要使用特定的输入值集并且数据库具有相同的状态,那么不管何时调用,确定性函数始终都会返回相同的结果。 即使访问的数据库的状态不变,每次使用特定的输入值集调用非确定性函数都可能会返回不同的结果。 例如,函数 AVG 对上述给定的限定条件始终返回相同的值,但返回当前 datetime 值的 GETDATE 函数始终会返回不同的结果。 有多个用户定义函数的属性通过对调用函数的计算列进行索引或通过引用函数的索引视图确定 SQL Server 数据库引擎为函数的结果建立索引的功能。 函数的确定性是一个属性。 例如,如果一个视图引用了任何不确定性函数,则无法对该视图创建聚集索引。 有关函数属性(包括函数确定性)的详细信息,请参阅用户定义函数。 本主题介绍了内置系统函数的确定性,以及在包含对扩展存储过程的调用时对用户定义函数的确定性的影响。 内置函数的确定性用户无法影响任何内置函数的确定性。 每个内置函数都根据 SQL Server 实现该函数的方式而分为确定性函数或非确定性函数。 例如,在查询中指定 ORDER BY 子句不会更改查询中使用的函数的决定机制。 所有字符串内置函数都具有确定性。 有关这些函数的列表,请参阅字符串函数 (Transact-SQL)。 内置函数类别中除字符串函数以外的下列内置函数始终具有确定性。 ABSDATEDIFFPOWERACOSDAYRADIANSASINDEGREESROUNDATANEXPSIGNATN2FLOORSINCEILINGISNULLSQUARECOALESCEISNUMERICSQRTCOSLOGTANCOTLOG10YEARDATALENGTHMONTHDATEADDNULLIF下列函数并非始终是确定性函数,但是在以确定性方式指定后,可用于索引视图或计算列的索引。 函数注释所有聚合函数除非用 OVER 和 ORDER BY 子句指定聚合函数,否则所有聚合函数都具有确定性。 有关这些函数的列表,请参阅聚合函数 (Transact-SQL)。 CAST除非与 datetime、smalldatetime 或 sql_variant 一起使用,否则其他时候都是确定性的。 CONVERT除非存在下列条件,否则为确定性函数:源类型是 sql_variant。 目标类型是 sql_variant,其源类型不是确定性的。 源类型或目标类型是 datetime 或 smalldatetime,其他源类型或目标类型是字符串,并且指定了不确定的样式。 若要为确定样式,则样式参数必须是常量。 此外,除了样式 20 和 21,小于或等于 100 的样式都具有不确定性。 大于 100 的样式具有确定性,但样式 106、107、109 和 113 除外。 CHECKSUM确定性函数,CHECKSUM(*) 除外。 ISDATE只有与 CONVERT 函数一起使用、指定 CONVERT 样式参数并且样式不等于 0、100、9 或 109 时,才是确定性函数。 RAND仅当指定 seed 参数时,RAND 才是确定性函数。 所有配置、游标、元数据、安全和系统统计函数都是非确定性函数。 有关这些函数的列表,请参阅配置函数 (Transact-SQL)、游标函数 (Transact-SQL)、元数据函数 (Transact-SQL)、安全函数 (Transact-SQL) 和系统统计函数 (Transact-SQL)。 其他类别中的下列内置函数始终为非确定性函数。 @@CONNECTIONSGETDATE@@CPU_BUSYGETUTCDATE@@DBTSGET_TRANSMISSION_STATUS@@IDLELAG@@IO_BUSYLAST_VALUE@@MAX_CONNECTIONSLEAD@@PACK_RECEIVEDMIN_ACTIVE_ROWVERSION@@PACK_SENTNEWID@@PACKET_ERRORSNEWSEQUENTIALID@@TIMETICKSNEXT VALUE FOR@@TOTAL_ERRORSNTILE@@TOTAL_READPARSENAME@@TOTAL_WRITEPERCENTILE_CONTCUME_DISTPERCENTILE_DISCCURRENT_timesTAMPPERCENT_RANKDENSE_RANKRANDFIRST_VALUERANKROW_NUMBERTEXTPTR从函数中调用扩展存储过程由于扩展存储过程会对数据库产生副面影响,因此调用扩展存储过程的函数为不确定性函数。 负面影响为对数据库全局状态的更改,如更新表、更新文件或网络等外部资源;例如,修改文件或发送电子邮件。 从用户定义函数中执行扩展存储过程时,不应该依靠返回一致的结果集。 建议不要使用对数据库产生负面影响的用户定义函数。 从函数内部调用扩展存储过程时,该扩展存储过程不能向客户端返回结果集。 任何向客户端返回结果集的开放式数据服务 API 将产生返回代码 FAIL。 扩展存储过程可以连接回 SQL Server。 但是,该过程不能与调用扩展存储过程的原始函数联接同一事务。 类似于从批处理或存储过程中调用,扩展存储过程在运行 Microsoft 的 SQL Server Windows 安全帐户的上下文中执行。 扩展存储过程的所有者在授予其他用户执行该过程的权限时应该考虑此问题。

谁能列举SQL Server 几个基本的函数的应用

--聚合函数use pubsgoselect avg(distinct price)--算平均数from titleswhere type=businessgo use pubsgoselect max(ytd_sales)--最大数from titlesgo use pubsgoselect min(ytd_sales) --最小数from titlesgo use pubsgoselect type,sum(price),sum(advance)--求和from titlesgroup by typeorder by typego use pubsgo select count(distinct city)--求个数from authorsgo use pubsgoselect stdev(royalty) --返回给定表达式中所有值的统计标准偏差from titlesgo use pubsgoselect stdevp(royalty) --返回表达式中所有制的填充统计标准偏差from titlesgo use pubsgoselect var(royalty) --返回所有值的统计方差from titlesgo use pubsgoselect varp(royalty) --返回所有值的填充的统计方差from titlesgo --数学函数 select sin(23.45),atan(1.234),rand(),PI(),sign(-2.34) --其中rand是获得一个随机数--配置函数SELECT @@VERSION --获取当前数据库版本SELECT @@LANGUAGE --当前语言--时间函数select getdate() as wawa_getdate --当前时间select getutcdate() as wawa_getutcdate --获取utc时间select day(getdate()) as wawa_day --取出天select month(getdate()) as wawa_month --取出月select year(getdate()) as wawa_year --取出年select dateadd(d,3,getdate()) as wawa_dateadd --加三天,注意d表示天,m表示月,yy表示年,下面一样select datediff(d,2004-07-01,2004-07-15) as wawa_datediff --计算两个时间的差select datename(d,2004-07-15) as wawa_datename --取出时间的某一部分select datepart(d,getdate()) as wawa_datepart--取出时间的某一部分,和上面的那个差不多--字符串函数select ascii(123) as 123,ascii(123) as 123,ascii(abc) as abc --转换成ascii码select char(123),char(321),char(-123) --根据ascii转换成字符select lower(ABC),lower(Abc),upper(Abc),upper(abc) --转换大小写select str(123.45,6,1), str(123.45,2,2) --把数值转换成字符串select ltrim(左边没有空格)--去空格select rtrim(右边没有空格 ) --去空格select ltrim(rtrim( 左右都没有空格)) --去空格select left(sql server,3),right(sql server,6) --取左或者取右 use pubsselect au_lname,substring(au_fname,1,1) --取子串from authorsorder by au_lname select charindex(123,abc123def,2) --返回字符串中指定表达式的起始位置select patindex(123,abc123def),patindex(%123%,abc123def) --返回表达式中某模式第一次出现的起始位置select quotename(abc,{),quotename(abc) --返回由指定字符扩住的字符串select reverse(abc),reverse(上海) --颠倒字符串顺序select replace(abcdefghicde,cde,xxxx) --返回呗替换了指定子串的字符串select space(5),space(-2) --系统函数select host_name() as host_name,host_id() as host_id,user_name() as user_name,user_id() as user_id,db_name() as db_name--变量的定义使用--声明局部变量declare @mycounter intdeclare @last_name varchar(30),@fname varchar(20),@state varchar(2) --一下声明多个变量--给变量赋值use northwindgodeclare @firstnamevariable varchar(20), @regionvariable varchar(30)set @firstnamevariable=anne --可以用set,也可以用select给变量赋值,微软推荐用set,但select在选择一个值直接赋值时很有用set @regionvariable =wa select lastname,firstname,title--用声明并赋值过的变量构建一个Select语句并查询from employeeswhere firstname= @firstnamevariable or region=@regionvariablego--全局变量select @@version--返回数据库版本select @@error--返回最后的一次脚本错误select @@identity--返回最后的一个自动增长列的id --while,break,continue的使用--首先计算所有数的平均价格,如果低于30的话进入循环让所有的price翻倍,--里面又有个if来判断如果最大的单价还大于50的话,退出循环,否则继续循环,知道最大单价大于50就break出循环,呵呵,--我分析的应该对吧 pubsgowhile (select avg(price) from titles) <$30 begin update titlesset price=price*2select max(price) from titlesif(select max(price) from titles) >$50breakelsecontinueendprint too much for the marker to bear --事务编程经典例子--begin transaction是开始事务,commit transaction是提交事务,rollback transaction是回滚事务--这个例子是先插入一条记录,如果出现错误的话就回滚事务,也就是取消,并直接return(返回),如果没错的话就commit 提交这个事务了哦--上面的那个return返回可以返回一个整数值,如果这个值是0的话就是执行的时候没出错,如果出错了就是一个负数,--这个return也可以用在存储过程中,可用用 exec @return_status= pro_name来获取这个值use pubsgobegin tran mytran insert into stores(stor_id,stor_name)values(333,my books) go insert into discounts(discounttype,stor_id,discount)values(清仓甩卖,9999,50.00) if @@error<>0begin rollback tran mytran print 插入打折记录出错 returnendcommit tran mytran --事务处理的保存点示例--做了事务保存点后可以rollback(回滚)到指定的保存点,不至于所有的操作都不能用use pubsgoselect * from storesbegin transaction testsavetran insert into stores(stor_id,stor_name)values(1234,W.Z.D Book) save transaction before_insert_data2 go insert into stores(stor_id,stor_name)values(5678,foreat Books) gorollback transaction before_insert_data2select * from stores --存储存储过程use pubsif exists(select name from sysobjects where name= proc_calculate_taxes and type=P) drop procedure proc_calculate_taxesgocreate procedure proc_calculate_taxes (@p1 smallint=42,@p2 char(1),@p3 varchar(8)=char)asselect *from titles--执行过程EXECUTE PROC_CALCULATE_TAXES @P2=A

sql server关于函数中如何使用Getdate()

-----以下是解析--------应为function内部不允许使用函数可以是确定的或不确定的。 如果任何时候用一组特定的输入值调用函数时返回的结果总是相同的,则这些函数为确定的。 如果每次调用函数时即使用的是相同的一组特定输入值,返回的结果总是不同的,则这些函数为不确定的。 不确定的函数会产生副作用。 副作用是更改数据库的某些全局状态,比如更新数据库表或某些外部资源,如文件或网络等(例如,修改文件或发送电子邮件消息)。 不允许在用户定义函数主体中内置不确定函数;这些不确定函数如下:@@CONNECTIONS @@TOTAL_ERRORS@@CPU_BUSY @@TOTAL_READ@@IDLE @@TOTAL_WRITE@@IO_BUSY GETDATE@@MAX_CONNECTIONS GETUTCDATE@@PACK_RECEIVED NEWID@@PACK_SENT RAND@@PACKET_ERRORS TEXTPTR@@TIMETICKS尽管在用户定义函数主体中不允许有不确定函数,这些用户定义函数在调用扩展存储过程时仍会产生副作用。 由于扩展存储过程会对数据库产生副作用,因此调用扩展存储过程的函数是不确定的。 当用户定义函数调用会对数据库产生副作用的扩展存储过程时,不要指望结果集保持一致或执行函数。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐