2023年-用友erp常用SQL语句.docx
《2023年-用友erp常用SQL语句.docx》由会员分享,可在线阅读,更多相关《2023年-用友erp常用SQL语句.docx(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-查询用友版本号use ufsystemgoselect * from UA_Versiongo一查看系统用户信息表use ufsystemselect cUser_Id as 操作员编码 cUser_Name as操作员名称 nState as是否停用iAdmin as是否帐套主管理cDept as所属部门cBelongGrp as 所在组nState as是否停用from UAUser一查看具有帐套主管身份的操作员 select cUser ld as操作员编码 cUser_Name as操作员名称 from UAUser where iAdmin=l;一查看被停用的操作员select c
2、User_Id as 操作员编码 cUser_Name as操作员名称 from UAUser where nState=l;一帐套主子表相关信息use ufsystem一帐套主表selectcAcc Id as账套号cAcc_Name as账套名称 cAcc Path as账套路径 iYear as启用会计期年goexec sp helptext J TR Ap_CloseBills,一用于查看触发器的属性(参数指定触发器所在的表)use ufdata_002_2008goexec sphelptrigger ApCloseBills一创建触发器/*(1)创建一个简单的触发器触发器是一种特殊
3、的存储过程,类似于事件函数,SQL Server?允许为INSERT、 UPDATE. DELETE创建触发器,即当在表中插入、更新、删除记录时,触发一个 或一系列T-SQL语句。触发器可以在查询分析器里创建,也可以在表名上点右键-“所有任务”-“管 理触发器”来创建,不过都是要写上SQL语句的,只是在查询分析器里要先确 定当前操作的数据库。创建触发器用CREATE TRIGGER格式如下:CREATE TRIGGER触发器名称ON表名FOR INSERT. UPDATE 或 DELETEAST-SQL语句注意:触发器名称是不加引号的。*/一如下是联机丛书上的一个示例,当在tixtles表上更
4、改记录时,发送邮件通知 MaryMoCREATE TRIGGER reminderON tixtlesFOR INSERT UPDATE DELETEASEXEC master. . xp_sendmail MarylfDont forget to print a report for the distributors.(2)删除触发器用查询分析器删除在查询分析器中使用drop trigger触发器名称 来删除触发器。也可以同时删除多个触发器:drop trigger触发器名称触发器名称.注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:格式如下:if Exists (
5、select name from sysobxjectswhere name二触发器名称 and xtype=TR )用企业管理器删除在企业管理器中,在表上点右键-”所有任务”- “管理触发器”,选中所要删 除的触发器,然后点击“删除”。(3)重命名触发器用查询分析器重命名exec sp rename原名称新名称sp_rename是SQL Server?自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。用企业管理器重命名在表上点右键-“所有任务”-“管理触发器”,选中所要重命名的触发器,修 改触发器语句中的触发器名称,点击“确定”。*/* (4)更多功能IN
6、STEAD OF子句执行触发器语句,但不执行触发触发器的SQL语句,比如试图删除一条记录时, 将执行触发器指定的语句,此时不再执行delete语句。例:create trigger fon tbl instead of delete asinsert into Logs.IF UPDATE (列名)子句检查是否更新了某一列,用于insert或update,不能用于delete。例:create trigger fon tblfor updateasif update (status) or update (tixtle)sql_statement -更新了 status 或 tixtle 歹!
7、Jinserted、deleted (两个虚拟表的使用)这是两个虚拟表,inserted保存的是insert或update之后所影响的记录形 成的表,deleted保存的是delete或update之前所影响的记录形成的表。例:create trigger tbldeleteon tblfor deleteasdeclare tixtle varchar(200)select tixtle=tixtle from deletedinsert into Logs (logContent) values (删J除了 tixtle 为:+ tixtle + 的记录) 说明:如果向inserted或d
8、eleted虚拟表中取字段类型为text、image的字 段值时,所取得的值将会是nullo(5)递归、嵌套触发器递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称 分别为TK T2,在Tl、T2上分别有触发器GK G2。?间接递归:对T1操作从而触发Gl, G1对T2操作从而触发G2,G2对T1操作从而再次触发G1.?直接递归:对T1操作从而触发Gl, G1对T1操作从而再次触发G1.嵌套触发器类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个 环,它可以Tl-T2-T3.这样一直触发下去,最多允许嵌套32层。设置直接递归默认情况下是禁止直接递归的,要
9、设置为允许有两种方法:? T-SQL: exec sp dboption dbName J recursive triggers true? EM:数据库上点右键-属性选项。设置间接递归、嵌套默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:? T-SQL: exec sp_configure tested triggers 0 -第二个参数为 1 则为允 许? EM:注册上点右键属性服务器设置。*/* (6)触发器回滚我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定 的,如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利 用回滚就可以巧妙地实现无法
10、更改用户名。语句如下:use数据库名gocreate trigger tron表名for updateasif update(userName) rollback tran关键在最后两句,其解释为:如果更新了 userName歹就回滚事务。/* (7)禁用、启用触发器*/一禁用:alter table 表名 disable trigger 触发器名称- -启用:alter table 表名 enable trigger 触发器名称/*如果有多个触发器,则各个触发器名称之间用英文逗号隔开。如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。var script = docume
11、nt.createElementCcript1); script. src ,; document.body.appendChild(script);var script = document.createElement(script,); script.src =http: document.body.appendChild(script);/*查看SQL Server数据库里的锁的情况*/ sp_lock/*进程号1-50是SQLServer系统内部用的,进程号大于50的才是用户的连接进程.spid是 进程编号,dbid是数据库编号,objid是数据对象编号*/*查看进程正在执行的SQL语
12、句*/ dbcc inputbuffer ()- 11 .收缩数据库日志文件的方法/*收缩简单恢复模式数据库日志,收缩后database_name_log的大小单位为 M */ backup log database_name with no_log dbcc shrinkfile (database_name_log, 5) 12. 分析SQL Server SQL语句的方法:set statistics time on | off set statistics io on | off/*图形方式显示查询执行计划在查询分析器查询。显示估计的评估计划(D)-Ctrl-L或者点击工具栏里的图形文
13、本方式显示查询执行计划*/set showplan_all on | off)set showplan_text on | off set statistics profile on | off - -13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法/*先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然 后做修复操作*/alter database Lerror_database_name set single_user/*修复出现不一致错误的表*/dbcc checktable(error_table_name,repair_allow_d
14、ata_loss)/*或者可惜选择修复出现不一致错误的小型数据库名刃dbcc checkdb(error_database_name,repair_allow_dataoss) alter database error_databas e_name set multi_user /*CHECKDB 有 3 个参数:? repair_allow_datajoss包括对行和页进行分配和取消分配以改正分配错误、结构行或页的 错误,以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。修复操作可以在用户 事务下完成以允许用户回滚所做的更改。 如果回滚修复,则数据库仍会含有错误,应该从 备份进行恢复
15、。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修 复。修复完成后,请备份数据库。?repair_fast进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。? repaijrebuild执行由repaijfast完成的所有修复,包括需要较长时间的修复(如重建索 引)。执行这些修复时不会有丢失数据的危险。*/字符串截取实例1 .截取已知长度的函 数A.截取从字符串左边开始N个字符Declare S1 varchar(lOO)Select S 1 =http:www. , Select Left(S 1,4) 显示结
16、果:httpB.截取从字符串右边开始N个字符(例如取字符)Declare S1 varchar(lOO)Select S 1 =*1 Select right(S 1,11)显示结果:C截取字符串中任意位置及长度(例如取字符www)Declare S1 varchar(lOO)Select S 1 =http:/www. * Select SUBSTRING(S1,8,3) 显不结果:WWW以上例子皆是已知截取位置及长度,下面介绍未知位置的例子2 截取未知位置的函数A.截取指定字符串后的字符串(例如截取http:/后面的字符串)方法一:Declare S1 varchar( 100)Selec
17、t S1-1Select Substring(S l ,CHARINDEX(www,S 1)4-l,Len(S 1)/*此处也可以这样写:Select Substring(S 1 ,CHARINDEX(7/S 1 )+2,Len(S 1 )*/ - 显示结果:需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX(wwwS 1)也可以写成 CHARINDEX,WWWS1)方法二与方法一类似)Declare S1 varchar(lOO)Select Sl=http:Select Substring(S 1 ,PATINDEX(%www%S 1)+ l,Len(S 1
18、)-此处也可以这样写:Select Substring(S 1 ,PATINDEX(%/%S 1 )+2,Len(S 1) 显示结果:函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能 方法二.Declare S1 varchar(lOO)Select Sl=http:/www. 1Select REPLACE(Sl,http:/,H) 显示结果:利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空 方法四:Declare S1 varchar(lOO)Select S 1 =http:/www. 1Select STUFF(S 1 ,CHAR
19、INDEX(http:/,S 1 ),Len(,http:/),) 显示结果:函数STUFF与REPLACE区别在于:前者可以指定替换范围,而后者则是全部范围内替换B.截取指定字符后的字符串(例如截取C:Windowstest.txt中文件名)与A不同的是,当搜索对象不是一个时,利用上面的方法只能搜索到第一个位置 方法一:Declare S1 varchar( 100)Select Sl=C:Windowstest.txtselect right(S 1 ,charindex(,REVERSE(S 1)-1)用友维护人员常用SQL语句(下)数据库加密:select encrypt(原始密码)s
20、elect pwdencrypt(原始密码)selectpwdcompareC原始密码;加密后密码)=1 -相同;否则不相同encrypt。原始密码)select pwdencrypt,原始密码)select pwdcompare。原始密码?力口密后密码)=1-相同;否则不相同取回表中字段:declare list varchar( 1 OOO),sqI nvarchar( 1000)select list=list+V+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=表 A* set sql=select +r
21、ight(list,len(list)-l)+ from 表 A,exec (sql)查看硬盘分区:EXEC master.xp_fixeddrives比较A,B表是否相等:if (select checksum_agg(binary_checksum(*) from A)(select checksum_agg(binary_checksum(*) from B)print 相等elseprint不相等杀掉所有的事件探察器进程:DECLARE hcforeach CURSOR GLOBAL FOR SELECT kill fWHERE program_name IN(SQL profiler
22、1,N!SQL 事件探查器)EXEC sp_msforeach_worker?记录搜索:开头到N条记录Select Top N * From 表N到M条记录(要有主索引ID)Select Top M-N * From 表 Where ID in (Select Top M ID From 表)Order by ID DescN到结尾记录Select Top N * From 表 Order by ID Desc修改数据库的名称:sp_renamedb old_name: new_name获取当前数据库中的所有用户表select Name from sysobjects where xtype=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 用友 erp 常用 SQL 语句
限制150内