1.如何删除表中的重复记录?(这里指记录的每个字段都要相同) 
select distinct * into #temp from tab 
delete tab 
insert tab select * from #temp 
drop table #temp 
1.DISTINCT 是 SUM、AVG 和 COUNT 的可选关键字。如果使用 DISTINCT,那么在计算总和、平均值或计数之前,先消除重复的值。
如果使用 DISTINCT 关键字,表达式必须只包含列名。而不能包含算术表达式。
以下查询返回商务书籍的平均价格(不包括重复的值):
USE pubs
SELECT AVG(DISTINCT price)
FROM titles
WHERE type = 'business'
2.DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行,distinct 后面的字段可以是多个或*,是一个那就各军兵种那个字段来取不重复的,
如果是多个,那就是筛选所选的字短都相同的记录.
USE pubs
SELECT DISTINCT au_id--按照一个字段筛选
FROM titleauthor
USE pubs
SELECT DISTINCT au_id,au_name --按照两个字段筛选
FROM titleauthor
2.怎样返回数据库中用户表的表单名 
select name from sysobjects where xtype='U'   
select name from sysobjects where xtype = 'u' and status >=0 
3. 
http://community.csdn.net/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.csdn.net/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,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)
 insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration)
insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration)  
  select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0'
 select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0'  from Epm_EmployeeList where corpid = 10001
      from Epm_EmployeeList where corpid = 10001  and not exists (select traceuser from trace_users )
               and not exists (select traceuser from trace_users )  and mobileid like '13%' and len(mobileid) = 11
               and mobileid like '13%' and len(mobileid) = 11 
cast 和convert DateAdd和DateDiff 
 -- 调度设置的时候更新人员状态
-- 调度设置的时候更新人员状态  --EPM_EmployeeList 里的active = 1
--EPM_EmployeeList 里的active = 1  --trace_Timer 里的active = 1
--trace_Timer 里的active = 1  --trace_users 里的traceduration 清0
--trace_users 里的traceduration 清0  --执行例子:exec up_SetSchedule 1001,'1009,1019'
--执行例子:exec up_SetSchedule 1001,'1009,1019'  ALTER  proc up_SetSchedule
ALTER  proc up_SetSchedule  --create proc up_SetSchedule
--create proc up_SetSchedule  @nCorpId int,
 @nCorpId int,  @vchEmployeeIds varchar(8000),
 @vchEmployeeIds varchar(8000),  @TimeStart DateTime,
 @TimeStart DateTime,  @TimeEnd DateTime
 @TimeEnd DateTime  
  as
as  declare @sql varchar(8000),@TraceSolt int
 declare @sql varchar(8000),@TraceSolt int  SET XACT_ABORT ON --任何一部有问题是都会回滚事务
 SET XACT_ABORT ON --任何一部有问题是都会回滚事务  BEGIN TRANSACTION --开始事务
 BEGIN TRANSACTION --开始事务  update EPM_EmployeeList set activeStatus = 0 where corpid = @nCorpId and activeStatus != 0
 update EPM_EmployeeList set activeStatus = 0 where corpid = @nCorpId and activeStatus != 0  if (@vchEmployeeIds !='')
 if (@vchEmployeeIds !='')  begin
  begin  set @sql ='update EPM_EmployeeList set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and id in ('+@vchEmployeeIds+')'
  set @sql ='update EPM_EmployeeList set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and id in ('+@vchEmployeeIds+')'  exec (@sql)
  exec (@sql)  --更新Trace_timer
  --更新Trace_timer  set @sql ='update trace_Timer set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and mobileid   in ('
  set @sql ='update trace_Timer set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and mobileid   in ('  set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'
  set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'  exec (@sql)
  exec (@sql)  select @TraceSolt = (select tracesolt from EPM_EnterpriseList where id = @nCorpId)
  select @TraceSolt = (select tracesolt from EPM_EnterpriseList where id = @nCorpId)  ('+@vchEmployeeIds+'))'
('+@vchEmployeeIds+'))'  set @sql ='update trace_users set createTime ='''+cast(@timeStart as varchar)+''''
   set @sql ='update trace_users set createTime ='''+cast(@timeStart as varchar)+''''  set @sql= @sql+',traceTime='''+cast(DateAdd(minute,@TraceSolt,@timeStart) as varchar )
   set @sql= @sql+',traceTime='''+cast(DateAdd(minute,@TraceSolt,@timeStart) as varchar )  set @sql= @sql+''',traceDuration ='''+convert(varchar,datediff(minute,@timeStart,@timeEnd))+''' where traceuser in ('
   set @sql= @sql+''',traceDuration ='''+convert(varchar,datediff(minute,@timeStart,@timeEnd))+''' where traceuser in ('  set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'
   set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'  exec (@sql)
   exec (@sql)  end
   end  COMMIT TRANSACTION --提交事务
 COMMIT TRANSACTION --提交事务  GO
GO 
--导出企业根据大类别。四个表就晕了。。。。。。。
--插入到临时表里 
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子句中如何写变量的表达式问题
 declare @ids varchar(8000)
declare @ids varchar(8000)  set @ids = '14501,14502,14503'
set @ids = '14501,14502,14503'  select * from table1 where  charindex(','+cast(id as varchar(20))+',',','+@ids+',')>0
select * from table1 where  charindex(','+cast(id as varchar(20))+',',','+@ids+',')>0 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号