hoyong

导航

用友 维护SQL

用友常用的几条数据库sql语句

常用的sql语句
1.比如:106科目改过辅助属性,以后不再用项目核算,在gl_accass辅助总帐表中的科目属性的citem_class中应无内容,可以用以下SQL语句实现:
Update
GL_ACCASS
SET
CITEM_CLASS
=
“”

Where
CCODE="106";2.如何用SQL语句求206科目12月的余额在贷方的合计值?cendd_c为vchar字符型方向字段,表示余额方向,ME为余额。
Select
sum(me)
FROM
gl_accass
Where
ccode="206"
and
cendd_c="贷"
and
iperiod=12

3.如何查找GL_accass中的科目在科目表中不是末级?
Select
A.CCODE
,B.BEND
FORM
GL_ACCASS
AS
A
JOIN
CODE
AS
B
ON
A.CCODE=B.CCODE
Where
B.BEND
=0

4.用户的部门目录表记录如何从另一个AA库中的department表中用语句把从库AA中数据导入?

Insert
INTO
DEPARTMENT

Select
*
FROM
AA..DEPARTMENT

5.如何查辅助总帐中的部门编号在部门目录中已不存在的记录?
Select
IDEPT_ID
FROM
GL_ACCASS

WHREE
IDEPT_ID
NOT
IN
(Select
IDEPT_ID
FROM
DEPARTMENT)

6.
如何在部门目录表中查找部门名称重复的记录数?
Select
CDEPNAME,
COUNT(CDEPNAME)
FROM
DEPARTMENT
GROUP
BY
CDEPNAME
HAVING
COUNT(CDEPNAME)>1;
 



用友U8维护人员数据库管理常用的SQL语句

来源:www.aobsoft.com.cn 作者:北京奥博信达 发表时间:2012-11-16 23:06:27
分享到:
0

 

用友U8维护人员数据库管理常用的SQL语句


 本文提供了维护时数据库管理中的常用SQL语句,供大家交流学习。
 一、查看数据库启动时间
 select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 /*查看数据库服务器名和实例名 */
 print Server Name.........: + convert(varchar(30),@@SERVERNAME)
 print Instance............: + convert(varchar(30),@@SERVICENAME)
 二、查看所有数据库名称及大小
 sp_helpdb /*查看某个特定数据库的名称及大小及存储位置*/
 exec sp_helpdb UFDATA_002_2008 /*重命名数据库用的SQL */
 sp_renamedb old_dbname , new_dbname
 三、查看数据库的版本
 select @@version
 四、查看数据库所在机器操作系统参数
 exec master..xp_msver
 五、查看数据库启动的参数
 sp_configure
 六、查看所有数据库用户登录信息
 sp_helplogins /*查看所有数据库用户所属的角色信息 */
 sp_helpsrvrolemember /*修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 *//*更改某个数据对象的用户属主 */
 sp_changeobjectowner [@objectname =] object , [@newowner =] owner /*注意: 更改对象名的任一部分都可能破坏脚本和存储过程。把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 */
 七、查看链接服务器
 sp_helplinkedsrvlogin /*查看远端数据库用户登录信息 */
 sp_helpremotelogin
 八、查看某数据库下某个数据对象的大小
 sp_spaceused @objname /*还可以用sp_toptables过程看最大的N(默认为50)个表 *//*查看某数据库下某个数据对象的索引信息 */
 sp_helpindex @objname/*还可以用SP_NChelpindex过程查看更详细的索引情况 */
 SP_NChelpindex @objname /*clustered索引是把记录按物理顺序排列的,索引占的空间比较少。对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。*//*查看某数据库下某个数据对象的的约束信息 */
 sp_helpconstraint @objname
 九.查看数据库里所有的存储过程和函数
 use @database_name
 sp_stored_procedures /*查看存储过程和函数的源代码 */
 sp_helptext @procedure_name /*查看包含某个字符串@str的数据对象名称 */
 select distinct object_name(id) from syscomments where text like %@str% /*创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数解密加密过的存储过程和函数可以用sp_decrypt过程 */
 十.查看数据库里用户和进程的信息
 sp_who /*查看SQL Server数据库里的活动用户和进程的信息 */
 sp_who active /*查看SQL Server数据库里的锁的情况 */
 sp_lock /*进程号1-50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
 spid是进程编号,dbid是数据库编号,objid是数据对象编号*//*查看进程正在执行的SQL语句 */
 dbcc inputbuffer ()
 



 


用友维护人员常用SQL 脚本
--查询用友版本号
use ufsystem
go
select * from UA_Version
go
-----------------------------------------------------------------
--查看系统用户信息表
use ufsystem" c. L3 W8 D3 b+ O% A4 d8 L+ L9 J
select  cUser_Id as 操作员编码,# b$ R2 _* v! s6 H& S1 Y1 H" I
cUser_Name as 操作员名称,- c6 m2 \% Z$ h6 u+ @6 N1 U
nState as 是否停用 ,
iAdmin as 是否帐套主管理,
cDept as 所属部门,
cBelongGrp as 所在组,0 E4 }8 ^2 ?# K# ^/ g
nState as 是否停用: S: \, Z8 z  F/ N" |) ]) r0 J3 x
from UA_User  b' u1 ~6 q. l) H
--查看具有帐套主管身份的操作员$ I2 s' t! s, b) l7 `
select  cUser_Id as 操作员编码,% A$ K  c; g; B/ l
cUser_Name as 操作员名称8 s6 L& a/ i8 [2 V1 e5 p$ }# e, ~3 d# Z
from UA_User where iAdmin=1;
--查看被停用的操作员
select  cUser_Id as 操作员编码,% P- t  V4 B$ ?3 P; c9 @
cUser_Name as 操作员名称0 b& F4 N. n9 o  ~/ c
from UA_User where nState=1;8 k) Q; @4 ]" U" {0 w9 @  _
& k% T! @1 b: \4 [$ }
--帐套主子表相关信息
use ufsystem
--帐套主表
select
  cAcc_Id as 账套号,+ A/ l5 o- Q" q/ N/ J+ Z9 S3 Q
  cAcc_Name as 账套名称,& @2 l% V& t  }7 _) T$ F# p& j! N
  cAcc_Path as 账套路径," K  x0 v8 \$ P4 U4 P) g( I* x% B9 Z
  iYear as 启用会计期年,' n: ^5 c9 s5 E; H% z0 ~
  iMonth as 启用会计期月," {: r7 [  o3 E6 h5 z% C, d: V
  cAcc_Master as 账套主管,
  cCurCode as 本币代码,
  cCurName as 本币名称,
  cUnitName as 单位名称,
  cUnitAbbre as 单位简称,
  cUnitAddr as 单位地址,  i9 D% B' _  F: @+ q8 e, j
  cUnitZap as  邮政编码,* Z6 [( C; j% b2 _
  cUnitTel as  联系电话,; ~- g5 \% v( i( g& ]; @( n
  cUnitFax as  传真,
  cUnitEMail as  电子邮件,, o3 z4 ~3 A1 Y8 v
  cUnitTaxNo as  税号,
  cUnitLP as  法人,
  cEntType as  企业类型,0 B& w' p- m2 G" Y' p
  cTradeKind as  行业类型,+ L- j. p: w. l; _
  cIsCompanyVer as  是否集团版,1 O: e2 D2 z* f( ?
  cDomain as  域名,  
  cDescription as 备注,  
  cOrgCode as 机构编码,# r. F. k% P; u3 V) G
  iSysID as 账套内部标识
from ua_account
--帐套子表
select cAcc_Id as 账套号,
iYear as 账套年度,6 l6 z' s8 h- {8 o1 q
  cSub_Id as 模块标识,
  bIsDelete as 是否删除,
  bClosing as 是否关闭,
  iModiPeri as 会计期间,- {( `) }. x  @/ O, x# [
  dSubSysUsed as 启用会计日期,
  cUser_Id as 操作员,
  dSubOriDate as 启用自然日期- Q* F: {  R4 k! f) }, p
from ua_account_sub
--当客户的数据在其它机器上做的升级然后拷回到原机器* e" m( q. @; r3 I: X9 d
/*拷回的数据,通过‘系统管理’在原机器上引入后,并不会在
ufsystem数据库中的ua_account_sub这个帐套子表中回写上一年度的bClosing字段来关闭上一年度; ]( q/ U7 I3 m1 J, p
*/
--比如002帐套结转后年度为2010,则用于关闭上一(2009)年度的sql如下:
select * from ua_account_sub where cAcc_Id='002' and iYear=2008
update ua_account_sub set bclosing=0
where cAcc_Id='002' and iYear=2008
-----------------------------------------------------------------  i- F/ k  u9 U* D5 S+ O
--清除异常任务及单据锁定1 Z7 R" K- _& q5 e  K. ~  D- H" H
use ufsystem4 L3 M8 M+ F5 Z- t0 U# a, M
delete from ua_task
delete from ua_tasklog
go
delete from ufsystem..ua_task
delete from ufsystem..ua_tasklog" N2 ]' A: X8 g. B4 @9 H
go3 W+ v) }% Y6 y+ f
Select *
From ua_task
Where(cacc_id='***')  --注:(***为账套号)
0 a1 k$ [9 c0 ?8 V
--科目锁定的解决* Z; [! ^9 K/ O8 g: Y8 ^( I
/*XX科目已经被用户[XX]锁定”
或“科目(xxxxxx)正在被机器(xxxx)上的用户(xxx)进行(xxxx)操作锁定,请稍候再试”。7 a# \+ j2 t9 i( N& X- f) A
*/
use UFDATA_002_2008
select  ccode as 科目编码, / _0 W+ U9 k$ B8 ^
  cauth as 功能名称, 5 G) X* {" e1 j" k* W! D
  cuser as 用户名, 2 ?9 v. y5 C' \# k& l' _
  cmachine as 机器名  
from GL_mccontrol) C5 ~5 |3 T# j
delete from GL_mccontrol2 w* N( o* K8 A) N# t+ j& F$ n: \
-----------------------------------------------------------------
--如何取得一个数据表的所有列名$ g( N- d9 x% @0 Y
/*( S& z. Z( M& e0 }1 S8 q
方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
SQL语句如下:*/0 O1 r& O  |0 v2 D
/*(方法一*/* ^3 I- K2 n7 _" l5 S; G) @. }# j6 z
select * from ufsystem..ua_account, u# n7 o# L/ [* M4 j9 N4 U
select * from syscolumns where id=object_id('ua_account')& |5 Z  N" D2 `. b2 S$ r$ C. {
declare @objid int,@objname char(40)
set @objname = 'ua_account'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid
/*(方法二(邹建)*/7 O; w; [! \, O2 ~( X
---跟踪程序的运行就可以了.   . Q# X" b2 e7 Q( O8 a( r' m
/*   
   
  开始--程序--MS   SQLSERVER   ( g: y! H1 t4 g; E, m! \  {+ v' r
  --事件探察器(SQL   Profiler)   
  --文件   - k8 L1 @7 c3 K3 {7 X7 Q
  --新建--跟踪...   
  --设置要跟踪的服务器的信息(连接服务器)--确定   
  --设置跟踪的项目...   * F8 {# Z$ M4 w+ s' H1 D
  --然后数据库的调用情况就会显示出来   4 I5 A! ~2 J3 S& a
    ! O; |+ i0 ~$ W
  在跟踪项目设置中,如果不熟悉的话,一般用默认设置   
  筛选项目有几个可以注意一下:   
   
  1.DatabaseName   同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)   ( x( w: X4 \- p; w* k
  2.DatabaseID       同于你要检测的数据库的dbid,可以用   select   db_id(N'你要监测的库名')得到dbid   
  3.ObjectName       同于你要监测的对象名,例如表名,视图名等   ( w/ V* b; ~2 y
  4.ObjectID           同于你要监测的对象的id,可以用   select   object_id(N'你要监测的对象名')得到id   
  5.Error                 同于错误,如果经常出现某个编号的错误,则针对此错误号   7 |7 n* T6 G8 U. n' w+ k
  6.Seccess             同于0,失败,1,成功,如果是排错,就过滤掉成功的处理( h( H- u5 G3 y1 |
*/% x! n2 F9 p' c6 C7 `
/*方法三:*/
--如果直接查询,可以参考我的这段代码:   
    ; O2 X7 a3 o. U# ]$ v
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_search]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
  drop   procedure   [dbo].[p_search]   8 F, S5 h  Q/ l
  GO   ; ]) c; E  b0 T- A! W( l9 G& A. B  A
    8 [) f. }6 y- ?) _) w9 x5 d  U
  /*--搜索某个字符串在那个表的那个字段中   
   
  --邹建   2004.10(引用请保留此信息)--*/   & X5 X2 d9 C- n+ P6 R
    . C) A2 z4 s6 e; a% U- l5 q& R
  /*--调用示例   8 l1 F5 k" L6 s+ ^. D
  use   pubs   
  exec   p_search   N'l'   
  --*/   
  create   proc   p_search   + U# ]0 X& W0 r0 K
  @str   Nvarchar(1000)   --要搜索的字符串   
  as   . w/ [9 v5 q0 b9 o+ p+ w
  if   @str   is   null   return   
    8 E& _# j0 z/ U6 U7 k
  declare   @s   Nvarchar(4000)   
  create   table   #t(表名   sysname,字段名   sysname)   1 s9 ]! L* @+ b9 ^
    , z; Y+ `/ @8 j# ?; o
  declare   tb   cursor   local   for   1 N- G! Y; x' c
  select   s='if   exists(select   1   from   ['+replace(b.name,']',']]')+']   where   ['+a.name+']   like   N''%'+@str+'%'')   : U& n& {2 W$ D* R; {- i
  print   ''所在的表及字段:   ['+b.name+'].['+a.name+']'''   - b2 s" J9 x2 f
  from   syscolumns   a   join   sysobjects   b   on   a.id=b.id   
  where   b.xtype='U'   and   a.status>=0   
  and   a.xtype   in(175,239,99,35,231,167)   
  open   tb   
  fetch   next   from   tb   into   @s   
  while   @@fetch_status=0   . I/ e" o: U. ?% Q7 m
  begin   
  exec(@s)   " L3 w7 W; c2 M. t. m
  fetch   next   from   tb   into   @s   , ]" r8 x. r" j* y# h
  end   + @! S+ D. `* e: Q. u
  close   tb   
  deallocate   tb   # `* y, \- Z8 ~! M& H( r
  go   
-----------------------------------------------------------------
-- 通过SQL语句来更改用户的密码
/*修改别人的,需要sysadmin  role    */6 P1 \1 A7 q7 Y; m+ T
EXEC  sp_password  NULL,  'newpassword',  'User'( ^7 ]. G2 U5 Z: S  \
/*如果帐号为SA执行*/9 U  ~( F$ ]) F6 h, L
EXEC  sp_password  NULL,  'newpassword',  sa  ) G0 G( h$ L* x3 o6 _8 Y* i
-----------------------------------------------------------------0 Y9 `. c: B' a' p% s
-- 通怎么判断出一个表的哪些字段不允许为空?
select  COLUMN_NAME  from  INFORMATION_SCHEMA.COLUMNS  where  IS_NULLABLE='NO'  and  TABLE_NAME='ua_account'  $ f) g8 y/ z! F- F0 E9 n( F

-----------------------------------------------------------------
-- 如何在数据库里找到含有相同字段的表?) d% V, t9 g1 g. C' o: s
-- a. 查已知列名的情况" c: g) M0 o9 [
SELECT  b.name  as  TableName,a.name  as  columnname  
From  syscolumns    a  INNER  JOIN    sysobjects  b    3 k/ S+ R, _( L5 F
ON  a.id=b.id   
AND  b.type='U'    + [3 ^7 o  W9 _. b. H
AND  a.name='cacc_id'  --本例如:cacc_id列
-- b. 未知列名查所有在不同表出现过的列名
Select  o.name  As  tablename,s1.name  As  columnname  8 c, U3 x& n9 v  G
From  syscolumns  s1,  sysobjects  o  6 |6 X- D5 a# f9 S8 {$ w- B
Where  s1.id  =  o.id  ) \% y0 C( s0 h" L9 b
   And  o.type  =  'U'  
   And  Exists  (  7 C4 y7 R! r' }
       Select  1  From  syscolumns  s2    ; P, h5 h. \# a, s
       Where  s1.name  =  s2.name   
       And  s1.id  <>  s2.id  ' n" C# E% {( F7 _6 f
       )$ ]  I- g5 H6 V5 Y# E/ Y! d
-----------------------------------------------------------------8 t( o+ ]/ @1 b- z6 O
-- 查询第xxx行数据' U; O7 l8 S1 K
-- 假设id是主键:  * i/ U5 Z' a( H
select  *  
from  (select  top  xxx  *  from  yourtable)  aa  / W& j. P( _# |& L% Z0 B0 t4 K
where  not  exists(select  1  from  (select  top  xxx-1  *  from  yourtable)  bb  where  aa.id=bb.id)
-- 如果使用游标也是可以的  
fetch  absolute  [number]  from  [cursor_name]  
-- 行数为绝对行数* M7 g2 `, q3 @, c! ~1 \) F  u
-----------------------------------------------------------------
-- SQL Server日期计算! o# R0 B; V( y$ X) m
/*a. 一个月的第一天*/7 |/ P  `4 @9 A  Z+ Z9 ]0 a
SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  * L+ l6 H. r7 F# K+ u- M6 n$ d: \
/*b. 本周的星期一*/4 S1 i. M+ Y- x- n% s# j
SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)
/*c. 一年的第一天*/
SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
/*d. 季度的第一天*/
SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
/*e. 上个月的最后一天 */+ y$ x9 a4 V2 a4 h
SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  5 j  i+ A4 t$ `. E4 J) U3 c, Q. u
/*f. 去年的最后一天*/9 m  R/ d% Z" I% ^; |6 }  L
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))
/*g. 本月的最后一天*/9 \* E( @2 f3 [1 B# V4 E( B% I
SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
/*h. 本月的第一个星期一*/
select  DATEADD(wk,  DATEDIFF(wk,0,                                                         
                               dateadd(dd,6-datepart(day,getdate()),getdate())        4 K0 L$ j4 e! y6 A. z5 S
                           ),  0)      ! W7 |& Z# m, |5 g4 T: _! K7 |
/*i. 本年的最后一天*/$ i& ^/ X' M" o$ C
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0)); V/ b: \% ]& @$ c  M

1.显示本月第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0) / D" N; ~% u) u3 G: ]1 E
select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)! B# R+ \9 g. U8 g+ ~
2.显示本月最后一天2 x! H' y( l- P( E; @9 x
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))& I; t- n7 d$ P9 e0 s+ Y
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) - L: S( p$ X( {* j* }- H! k
3.上个月的最后一天 * a, C5 |2 r5 ]& J/ X$ T3 O; D
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)) # w6 O/ x9 e3 b3 A) e# k! x
4.本月的第一个星期一) u7 C8 I: q: F" f2 d3 w$ o  l
select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)( @& a# D: W5 ^( P4 f2 J, B0 w
5.本年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0) 9 g3 U+ G; Z4 E1 r
6.本年的最后一天 - L5 V3 \6 Q9 A) h
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))( f; O* n# ~, ], ?5 M# V
7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))! y6 Y$ f/ _+ |8 m
8.本季度的第一天 . f1 W2 Q+ r2 Z* a7 @% o6 w9 w
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)  
9.本周的星期一
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
10.查询本月的记录
select * from tableName where DATEPART(mm, theDate) = DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
11.查询本周的记录
select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
12.查询本季的记录
select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
其中:GETDATE()是获得系统时间的函数。
13.获取当月总天数:
select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))
select datediff(day,
dateadd(mm, datediff(mm,'',getdate()), ''),
dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))
14.获取当前为星期几0 X/ \# V; y' J- z. z2 w, Q
DATENAME(weekday, getdate())6 g- R  L, @; L5 e* c# C
-----------------------------------------------------------------5 S% U7 O  ]) {7 Y# e) F$ a
/*查询数据库的所有用户表*/* _; |# Z( n( {
use ufdata_002_2008
select   name   from   sysobjects   where   type='U'
-----------------------------------------------------------------
--查看数据库中所有的触发器3 x) r3 j7 |. L# p
use ufdata_002_2008
go
select * from sysobjects where xtype='TR'' N/ ]% Q4 N5 w2 t6 T6 C
-----------------------------------------------------------------
--查询特定数据库中某一不知归属表的触发器5 U) D: v& a  s$ U5 K, O+ F
/*查询某一个触发器TR_Ap_CloseBills所归属的表*/
use ufdata_002_20087 X9 m, l! k& S' @, K' ]& X
declare   @parent_obj_id   int   --定义父对象id变量* O. a4 ]1 k/ \) \/ p
--先找出父对象(所在表)的id(在触发器不重复归属于多个表的情况下)/ U  ]8 V7 Y$ g8 [! e
select @parent_obj_id=parent_obj
from sysobjects where name='TR_Ap_CloseBills'
and xtype='TR'  6 ^. l" k; K1 Z6 ]
print '所在父对象(表)的ID是:'+str(@parent_obj_id)
--接下来找出父对象(表)的名称
select name as 触发器所在表为
from sysobjects where   type='U' and id=@parent_obj_id3 ?" X: @; T( a+ w+ S  r: _
-----------------------------------------------------------------
--查看触发器内容
use ufdata_002_2008& @' f1 T4 z' w* `4 U
go
exec sp_helptext 'TR_Ap_CloseBills' ( I' F4 S0 S8 n) {+ a. B  B5 V
-----------------------------------------------------------------* |7 U$ T$ L5 x! m! G2 j
--用于查看触发器的属性(参数指定触发器所在的表)
use ufdata_002_2008
go
exec sp_helptrigger Ap_CloseBills
-----------------------------------------------------------------9 s  g/ L' X6 @  \
--创建触发器/ b3 l/ L- m# l# F, c
/*, h9 b( y0 L7 K1 L! q* e) F
(1)创建一个简单的触发器) D, }# ?2 T. H5 V6 m! M; V
触发器是一种特殊的存储过程,类似于事件函数,SQL Server? 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。6 D+ G2 d! S! O
触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的数据库。
创建触发器用 CREATE TRIGGER# v" ?& S8 v# Z* v% P3 Q
格式如下:
------------------------------
CREATE TRIGGER 触发器名称2 U  Q; X& W5 V. y; H
ON 表名# }& A8 Z1 y) @% _: d7 N
FOR INSERT、UPDATE 或 DELETE
AS$ b( a% y: t' M8 O% x- @8 P" H% ^
      T-SQL 语句  y. h. S+ t' J% @  D6 i
------------------------------
注意:触发器名称是不加引号的。
*/6 v9 q! B2 _8 C+ T" s; O% C
--如下是联机丛书上的一个示例,当在 titles 表上更改记录时,发送邮件通知 MaryM。2 c4 `# K+ g& g# m  e9 _7 e
CREATE TRIGGER reminder0 u4 h0 t8 Z, `% I
ON titles% P. k& i: q1 Q/ \9 S* K% }
FOR INSERT, UPDATE, DELETE * }( T* I' _% W2 ~) f
AS" Y( i5 O  R3 T) N% i" ~( _
   EXEC master..xp_sendmail 'MaryM',
      'Don''t forget to print a report for the distributors.'4 m2 |) [6 D$ g
/*
(2)删除触发器( o3 q3 p( I  A) v1 [( K* Y% ?
用查询分析器删除! S7 e/ s8 V' s& o$ S
在查询分析器中使用 drop trigger 触发器名称 来删除触发器。4 b  J5 A2 \( h5 d$ W! k' @/ u$ _4 A
也可以同时删除多个触发器:drop trigger 触发器名称,触发器名称...
注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:
格式如下:
------------------------------3 X* _2 t# |* `2 E
if Exists(- @6 L- F. h" R2 a( D
select name from sysobjects
where name=触发器名称 and xtype='TR'& \" t% a- k- ~; O
)
------------------------------
用企业管理器删除
在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。
*/
/*
(3)重命名触发器0 |9 j3 K/ Z& s; }7 ~9 T1 j
用查询分析器重命名- M9 f+ R4 z1 ]7 q) R
exec sp_rename 原名称, 新名称$ T( u+ X" q6 y+ T8 ]. m
sp_rename 是 SQL Server? 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。8 ^' F9 K+ S! C& _+ r' \
用企业管理器重命名' n, `' U' C# K6 z% ]* S7 s( Q) a+ y
在表上点右键->“所有任务”->“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击“确定”。
*/2 z3 a% M- R6 ~( z6 s; x; C/ Z
/*(4)更多功能
①INSTEAD OF 子句) R6 h* S. _$ E" X3 o* f0 O
执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:5 B5 y7 e, D$ ?  G7 D8 ~
------------------------------
create trigger f
on tbl; `# N. c; e( @
instead of delete
as
    insert into Logs...
------------------------------6 a9 [& Z+ L* T3 E5 x
②IF UPDATE(列名) 子句
检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:6 a5 d+ Z1 {( b
------------------------------
create trigger f3 K/ X3 E% n' W
on tbl
for update
as
    if update(status) or update(title)
        sql_statement --更新了 status 或 title 列
------------------------------
③inserted、deleted(两个虚拟表的使用)5 f) p' ?  L  N, }8 Z9 F
这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:- _# Z- R5 S% F$ l4 g
------------------------------
create trigger tbl_delete. g! b2 p1 d* @3 G4 Z
on tbl" u. X' k- B; I7 E3 Q+ @
for delete! L  [1 T3 H* ]
as
    declare @title varchar(200)
    select @title=title from deleted/ ^  M4 L/ o' e( W& H: R
    insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')1 c, M. i0 B% G( B
------------------------------. d4 s$ v1 I+ d7 A6 w3 G3 N
说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。
*/
/*
(5)递归、嵌套触发器
递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。
? 间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...
? 直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1...
------------------------------% m* b/ u6 X7 i# a5 J; b; R; M
嵌套触发器
类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。
------------------------------) w7 x8 u& Y4 k' B
设置直接递归8 R8 p6 h: t7 f8 O, Y) a& d
默认情况下是禁止直接递归的,要设置为允许有两种方法:
? T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true
? EM:数据库上点右键->属性->选项。 ) D9 o2 }, m9 J, [
------------------------------
设置间接递归、嵌套1 j6 s" T3 `# l1 M+ T5 l, [! p' h
默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:
? T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许
? EM:注册上点右键->属性->服务器设置。
*// I) v1 A% `" O
/*(6)触发器回滚3 \$ t6 a0 z# K) }- ^  [2 \
我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。+ ], b7 x* H- v1 J: m! h/ @. k
语句如下:
------------------------------  A6 O2 @( \: d' ~, V
use 数据库名
go
create trigger tr3 {9 H1 V3 f( @9 M+ \
on 表名+ S/ I6 a: j2 K. h+ ]( c
for update
as
    if update(userName)
        rollback tran/ c4 \  p0 w( y' a
------------------------------4 n" j* w2 J3 {1 h" s7 Y3 @
关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。  @' w/ ]1 i) V' b- J" F. Z! h
*/4 f% A4 h3 z1 a
/*(7)禁用、启用触发器*/
--禁用:& U+ X  y) Z8 X. v; X! E" L
alter table 表名 disable trigger 触发器名称% m: J2 Y( l4 l
--启用:0 Q# }8 M, S- k! B4 f  X
alter table 表名 enable trigger 触发器名称' i( p8 F3 q$ c3 H7 ]  O1 ?7 y. Q- w
/*如果有多个触发器,则各个触发器名称之间用英文逗号隔开。# L! ^: G. p  p' s, Y* E
如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。! ?) Y4 [2 N8 T% K( v
*/, [8 t8 B' l% l# P5 ~. H& k
用友软件--------南通易友软件服务


用友u8中常用数据库表及主要字段(2)

(2009-07-21 06:22:05)

八:printex(打印控制表)

字段值

中文名

备注

cTableName

表名称

 

cResPathHead

表头文件全名

存储表头文件路径和名称

cResPathTail

表尾文件全名

存储表尾文件路径和名称

清除单据锁定:Delete gl_mccontrol  DeleteLockvouch

除这两张表以外和锁定相关的表还有:GL_mvcontrol;GL_mvocontrol这两张表。如果上述讲的方法不能解决问题,我们可以同时把这两张表清除就可以解决。

九:GL_mend(月末结账标志表)

字段名

中文名称

备注

Iperiod

对应结账期间

 

Bflag

总账结账标志

 

Bflag_

个模块结账列

在下滑线后面跟上个模块标志表示对应模块的结账标志

十:wa_account(工资类别管理表)

字段名

中文名称

备注

cGZGradeNum

工资类别号

 

cGZGradename

工资类别名称

软件中不能进行修改,可以在数据表中进行修改名称

dStart_time

启用日期

工资类别启用日期,要大于工资系统的启用日期

iLastMonth

不允许工资变动最后月

每次进行对应的工资类别的月末处理后都要修改这个字段对应的月份。

iPsn_len

员工编码长度

 

十一:ua_account_sub(账套年度设置表)

字段名

中文名称

备注

cAcc_Id

账套号

 

iYear

账套年度

 

cSub_Id

模块标识

具体标识参照标注(二)

bClosing

是否关闭

除了总账模块之外的其他模块在进行年度结转以后这个字段值会变为1,只能修改为0才能再次进行年度结转


十二:
UA_period(会计期间设置表)(UFSYSTEM数据库)

字段名

中文名称

备注

cAcc_Id

账套号

 

iYear

账套年度

 

iId

会计期间

每个年度必须12个期间

dBegin

开始日期

每个会计期间对应的开始日期

dEnd

结束日期

每个会计期间对应的结束日期

十三:gl_accass(科目辅助数据表) 

字段名

中文名称

备注

Ccode

科目编码

 

Iperiod

会计期间

每个科目每一对辅助核算都要有12个期间

cdept_id

部门编码

 

cperson_id

职员编码

 

csup_id

供应商编码

 

ccus_id

客户编码

 

citem_class

项目大类编码

 

citem_id

项目编码

要与项目目录中设置的项目大类编码相一致

mb

金额期初

要与上期期末余额数相等

md

借方金额

 

mc

贷方金额

 

me

金额期末

有期初余额和累计借方和累计借方计算得出结果。

 十四:gl_accsum(科目总账表)

字段名

中文名称

备注

Ccode

科目编码

 

Iperiod

会计期间

每个科目对应着12个期间

mb

金额期初

要与上期期末余额数相等

md

借方金额

对应期间的累计借方值

mc

贷方金额

对应期间的累计贷方值

me

金额期末

有期初余额和累计借方和累计借方计算得出结果。

十五:gl_accvouch(凭证及明细账表)

字段名

中文名称

备注

Ccode

科目编码

 

Iperiod

会计期间

凭证所在期间

ino_id

凭证编号

 

md

借方金额

 

mc

贷方金额

 

cbook

记账人

与ibook字段一起来确定是否凭证已经记账

bdelete

是否核销

进行银行核销以后修改标志

coutno_id

外部凭证业务号

通过这个编号和外部系统业务进行相连。

ccode_equal

对方科目编码

打印日记账的时候会显示




用友u8中常用数据库表及主要字段(1)

(2009-07-21 06:12:57)

一:Accinformation(账套参数表):

字段名

中文名

备注

cSysID

系统标志

指对应的设置在哪个模块中起作用

cID

项目ID

与cSysID组合来定位某个模块的对应的功能项目

cCaption

项目描述

我们可以通过这个字段了解对应的项目在软件中的作用

cValue

取值

指对应的项目在软件中的状态

cDefault

默认值

指账套最初的项目对应状态

二:各个模块对应的系统标志cSysID:
AA:表示公共字段;FA:表示固定资产;WA:表示工资管理;SA表示销售管理;GL:表示总账系统;AP:表示应付系统;AR:表示应收系统;ST:表示库存系统;PU:表示采购系统;IA:表示核算系统;BI表示老板通。

三:Inventory(存货档案):

字段

中文名

备注

Cinvcode

存货名称

业务单据保存的表通过这个字段于存货档案进行关联获取对应存货的其他信息

Cinvname

存货名称

 

Bfree1,bfree2

自由项1,2

 

Cinvccode

存货大类编码

存货档案和存货大类通过这个字段建立关联

四:Department(部门档案表)

字段名

中文名

备注

cDepCode

部门编码

与相关业务表相关联的字段

bDepEnd

是否末级

是否为末级部门

iDepGrade

编码级次

 

cDepName

部门名称

 

五:Warehouse(仓库档案表)

字段名

中文名

备注

cWhcode

仓库编码

各业务数据表通过这个字段与仓库档案表建立关联来确定仓库的详细信息

cWhValueStyle

仓库计价方式

业务单据在记账的过程中通过对应的仓库信息中的这个字段来确定成本的计算方式

bWhPos

是否货位管理

 

 六:Code(科目表)

字段名

中文名

备注

Ccode

科目编码

与业务表建立关联的字段。

ccode_name

科目名称

一级科目的科目名称不能重复

igrade

编码级次

 

bend

是否末级

确定是否为末级科目

bproperty

科目性质

确定科目的借贷方向

bcus

是否客户往来核算

 

bsup

是否供应商往来核算

 

bdept

是否部门核算

 

bitem

是否项目核算

 

cass_item

项目大类

 

bperson

是否个人往来核算

 

七:dsign(凭证类别表)

字段名

中文名

备注

Csign

凭证类别字

我们所说的凭证类别是’记’字还是’银’字的

Isignseq

凭证类别排序号

和凭证类别字一起来确定凭证属于哪个凭证类别,在凭证及明细表中也有对应字段

Ctext

凭证类别名称

显示为每张凭证标头。

_________________________________________________________________________________________

经典SQL语句大集合

经典SQL语句大集合:469 下列语句部分是Mssql语句,不可以在access中使用。

SQL分类:

DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)

DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)

DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- 开始 备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

5、说明:

删除新表:drop table tabname

6、说明:

增加一个列:Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:

添加主键:Alter table tabname add primary key(col)

说明:

删除主键:Alter table tabname drop primary key(col)

8、说明:

创建索引:create [unique] index idxname on tabname(col….)

删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:

创建视图:create view viewname as select statement

删除视图:drop view viewname

10、说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count * as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

其次,大家来看一些不错的sql语句

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)

对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:

Randomize

RNumber = Int(Rnd*499) +1

While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 这里是执行脚本 ...

end if

objRec.MoveNext

Wend

这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一 个数据库内就包含了成千上万条记录。这时候不就死定了?

采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:

Randomize

RNumber = Int(Rnd*499) + 1

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber

set objRec = ObjConn.Execute(SQL)

htm = htm&RNumber & " = " & objRec("ID") & " " & objRec("c_email")

不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。

再谈随机数

现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。

为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3

假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

随机读取若干条记录,测试过

Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)

Sql server:select top n * from 表名 order by newid()

mysql select * From 表名 Order By rand() Limit n

Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)

语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL语句 用...代替过长的字符串显示

语法:

SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

Conn.Execute说明

Execute方法

该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

1.执行SQL查询语句时,将返回查询得到的记录集。用法为:

Set 对象变量名=连接对象.Execute("SQL 查询语言")

Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:

连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]

·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。

·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

·BeginTrans、RollbackTrans、CommitTrans方法

这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。

事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。

BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过 连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一 个错误信息。

SQL语句大全精要

 

2006/10/26 13:46

DELETE语句

DELETE语句:用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用DELETE删除多个记录。

语法:DELETE [table.*] FROM table WHERE criteria

语法:DELETE * FROM table WHERE criteria='查询的字'

说明:table参数用于指定从其中删除记录的表的名称。

criteria参数为一个表达式,用于指定哪些记录应该被删除的表达式。

可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用 DELETE,只有数据会被删除;表的结构以及表的所有属性仍然保留,例如字段属性及索引。

UPDATE

有关UPDATE,急!!!!!!!!!!!

在ORACLE数据库

表 A ( ID ,FIRSTNAME,LASTNAME )

表 B( ID,LASTNAME)

表 A 中原来ID,FIRSTNAME两个字段的数据是完整的

表 B中原来ID,LASTNAME两个字段的数据是完整的

现在要把表 B中的LASTNAME字段的相应的数据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。

update a set a.lastname=(select b.lastname from b where a.id=b.id)






来自为知笔记(Wiz)



posted on 2015-04-13 21:43  hoyong  阅读(1942)  评论(0编辑  收藏  举报