1.如何删除表中的重复记录?
select distinct * into #temp from tab
delete tab
insert tab select * from #temp
drop table #temp
2.怎样返回数据库中用户表的表单名
select name from sysobjects where xtype='U'
select name from sysobjects where xtype = 'u' and status >=0
3.
http://community.youkuaiyun.com/Expert/topic/4191/4191899.xml?temp=.5814325
各位大大请帮个忙,
一个表中A字段是int型的自动编号,B字段是首先要获取A字段已有的自动编号数据再经过加入时间等后生成的数据,表如下
C,D(日期),E为其他数据
列名 A(自动递加) B(A字段数据+日期等) C D E
---------------------------------------------------
1 A+D . . .
2 A+D . . .
---- 建立测试环境:
create table table1(a int identity,b varchar(20),c datetime,d datetime,e int)
create proc proc1
@c datetime,
@d datetime,
@e int
as
declare @f int
insert table1 (c,d,e) values(@c,@d,@e)
select @f=@@identity
if @@error=0
begin
update table1 set b=convert(varchar,a)+convert(varchar(12),d,120) where a=@f
end
---执行存储过程
exec proc1 '2001-10-01','2001-10-20',45
select * from table1
4.事务问题
http://community.youkuaiyun.com/Expert/topic/4245/4245634.xml?temp=.663891
(1)try:
-------------------------------------------------------------------------
CREATE PROCEDURE sp_Order_UpdateOrderFormHeadByAffirm
@OrderFormHeadID int,
@AffirmPerson nvarchar(50)
AS
BEGIN TRANSACTION
DECLARE @OrderFormNo nvarchar(50), @FranchiserNo nvarchar(10), @TotalSum decimal(18,4)
--更新状态为确认
UPDATE
AD_U_HEAD_A_SSGL
SET
Tag = 1
WHERE
OrderFormHeadID = @OrderFormHeadID
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--返回 订单管理(HEAD)的一些信息
SELECT
@OrderFormNo = OrderFormNo,
@FranchiserNo = FranchiserNo,
@TotalSum = TotalSum
FROM
AD_U_HEAD_A_SSGL
WHERE
OrderFormHeadID = @OrderFormHeadID
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--更新 订单管理(DATA)
UPDATE
AD_U_DATA_A_SSGL
SET
Tag = 1,
AffirmPerson = @AffirmPerson,
AffirmDate = GETDATE()
WHERE
OrderFormNo = @OrderFormNo
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--经销代理资信余额(MAIN)
EXEC sp_Order_UpdateCreditBalance @FranchiserNo, 0, 0, 0, @TotalSum, 0
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--新增 订单确认日志(SLOG)
INSERT INTO
AD_U_SLOG_A_DDQR(OrderFormNo, GoodsNo, Quantity,
UnitPrice, ProductPackingNo,TotalQuantity, TotalSum, Rebate, FactSum)
SELECT
OrderFormNo, GoodsNo, Quantity, UnitPrice, ProductPackingNo,
TotalQuantity, TotalSum, Rebate, FactSum
FROM
AD_U_DATA_A_SSGL
WHERE
OrderFormNo = @OrderFormNo
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
COMMIT TRANSACTION
GO
(2)----------------------------------
CREATE PROCEDURE sp_Order_UpdateOrderFormHeadByAffirm
@OrderFormHeadID int,
@AffirmPerson nvarchar(50)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
......
(3)你说得没错 其实你那样用事务的画没什么作用,每个存储过程都是一个事务。如果用事务最好有出错的处理是否回滚之类的东西。但是要考虑好表之间的关联性,如果都是一些单独的表,可以分几个事务处理,如果是父子表还是要放在一个事务里面。保证其数据的准确
性。
4请给条如何找出重复记录的SQL语句 select ID from A group by ID having count(1)>1
有一个触发器,触发该触发器的方法有insert,update,delete
但是,我如何可以判断我到底是用哪种方法触发该触发器
http://community.youkuaiyun.com/Expert/topic/4234/4234894.xml?temp=.3572657
create trigger 触发名 on 表名
instead of insert,update,delete
as
--insert插入
if not exists(select 1 from deleted)
begin
打印插入
end
--update更新
if exists(select 1 from inserted) and exists(select 1 from deleted)
begin
打印修改
end
--delete删除
if not exists(select 1 from inserted)
begin
打印删除
end
go
select A.*
,isnull(B.so,'') as 'so'
from table1 A
left join table2 B on A.id=B.id
获得所有触发器及其表名
select object_name(id) as 触发器名称, object_name(parent_obj) as 表名称 from sysobjects
where xtype=N'TR'
-- 由一个表向另一表插入数据.
insert into EPM_DepartmentList(id,name,parentdeptid,state,type,showindex,url,corpid)
表 A ,有2个字段 Id--Int,Name--Varchar(20)
假设 表 A 里存储了30万记录,其中有1条记录的 ID 是重复的,现在我想找出该条记录ID,SQL语句?
有两个表 table1 和talbe2,字段和内容如下
字段 id name id so
00 n1 00 s1
01 n2 03 s3
03 n3
怎样写一个sql语句,得到记录集
字段 id name so
00 n1 s1
01 n2
03 n3 s3
select id,name,parentDeptid,status as state,type,showindex,url,corpid = 1001
from zfj_dept
日期:
select convert(varchar(16),getDate(),120) 2005-11-18 10:20
select convert(varchar,datepart(minute,getdate())) 获得分钟且转换为字符型
内联结/外联结
--返回两个表中共有的所有记录
select *
from testTable as a
inner join TestTableChild as b on a.id = b.parentid
--返回(左表)TestTable所有记录
select *
from testTable as a
left outer join TestTableChild as b on a.id = b.parentid
--返回(右表)TestTableChild的所有记录
select *
from testTable as a
right outer join TestTableChild as b on a.id = b.parentid
--- 返回 两个表里共有的记录,且不重复
select a.id,a.name,b.name
from testTable as a
inner join TestTableChild as b on a.id = b.parentid
group by a.id,a.name,b.name
--返回(左表)TestTable所有记录
select a.id,a.name,b.name
from testTable as a
left outer join TestTableChild as b on a.id = b.parentid
group by a.id,a.name,b.name
--------
select a.id,a.subject,b.contentType,c.AuguryUp,c.AuguryDown,
case c.type when '1' then '爱情' when '2' then '财运' when '3' then '事业' end as type
from MMS_Content as a
left outer Join MMS_ContentChild as b on a.id = b.parentid
left outer join AuguryList as c on a.id = c.parentid
where a.dept = 6
group by a.id,a.subject,b.contentType,c.AuguryUp,c.augurydown,c.type
向一个表A中插入记录,并且插入的记录在A中不存在(通过一个字段来判断)
insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration)
select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0'
from Epm_EmployeeList where corpid = 10001
and mobileid not in (select traceuser from trace_users )
and mobileid like '13%' and len(mobileid) = 11
下面的要好些(not exists)







cast 和convert DateAdd和DateDiff




































--导出企业根据大类别。四个表就晕了。。。。。。。
--插入到临时表里
select distinct (a.id),a.corpname,a.corplinkman,a.phonenumber,a.createtime,a.address
,(select distinct d.name
from
dz_subinfoDefine as c,
dz_mainInfoDefine as d
where c.maintype = d.maintype
and c.subtype = b.infotype) as type
into #table2
from dz_corporation as a
left join dz_information as b on a.id = b.corpid
--插入到表里.需要两次是因为无法对类别(大类)进行排序
select case when type IS NULL then '未知类别' else type end as 大类别,corpname as 名称 ,corplinkman as 联系人,phonenumber as 联系电话,address as 地址 ,createTime as 创建时间 into Table1 from #table2
order by type
----删除临时表
drop table #table2
好的方法????找不到........可能是数据库设计的不好.
通过另一个表来更新本表的记录.
begin transaction
update EPM_Employeelist set loginname =b.loginname,password= b.password
from zfj_users as b
where
EPM_Employeelist.userid = b.userid
and corpid = 10001
rollback transaction
在in子句中如何写变量的表达式问题



一个存储过程

















































































































--获得系统对象:
xtype的值:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
随机数自定义方法




































用户定义函数中不允许使用会对每个调用返回不同数据的内置函数
其中就有getdate哦
用户定义函数中不允许使用以下内置函数:
@@CONNECTIONS
@@PACK_SENT
GETDATE
@@CPU_BUSY
@@PACKET_ERRORS
GetUTCDate
@@IDLE
@@TIMETICKS
NEWID
@@IO_BUSY
@@TOTAL_ERRORS
RAND
@@MAX_CONNECTIONS
@@TOTAL_READ
TEXTPTR
@@PACK_RECEIVED
@@TOTAL_WRITE























按照月统计
select datepart(month,createtime) as '月分',count(mobileid) as '数量'
from User_answer
where createtime >= '2005-4-29' and accessnumber = 1111111
group by datepart(month,createtime)
-------------------------------------------------------------
其它
select a.fee_user as '号码',b.message as '内容',a.sendTime as '时间'
into test
from his_smdr a
left join his_deliver b on a.fee_User = b.src_userid
where
a.src_addr = '05555001' and a.sendtime >='2005-4-29'
and a.src_addr=b.dst_userid --需要
and datediff(ss,b.createtime,a.sendtime)<=10 and datediff(ss,b.createtime,a.sendtime)>='0'
order by sendTime desc












自定义方法的使用.


















sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。





