更新数据库中所有日期字段,周日减一天

-----------------------方法1

Declare @T Varchar(255),@C Varchar(255)
Declare Table_Cursor Cursor For
Select A.Name,B.Name From Sysobjects A,Syscolumns B Where A.Id=B.Id And A.Xtype='u' And (B.Xtype=58 Or B.Xtype=61)

Open Table_Cursor
Fetch Next From Table_Cursor Into @T,@C

While(@@Fetch_Status=0)
Begin
Exec('SET DATEFIRST 1 update ['+@T+'] Set ['+@C+']=['+@C+']-1 where datepart(dw,['+@C+'])=7')
Fetch Next From Table_Cursor Into @T,@C
End
Close Table_Cursor
Deallocate Table_Cursor

-------------------------方法2

declare @tablename varchar(100),@colname varchar(50)
--用游标
declare @str varchar(100)
--定义游标
declare DZCursor CURSOR for select b.name tablename,a.name colname from syscolumns a,sysobjects b where a.id=b.id and b.xtype='u' and object_id(b.name)>0 and a.xtype in (58,61) order by b.name,a.name
--打开游标
open DZCursor
--从游标取记录
fetch next from DZCursor into @tablename, @colname
--当有记录
while @@fetch_status=0
begin
set @str='update '+@tablename+' set '+@colname+'=dateadd(dd,-1,'+@colname+') where datepart(dw,'+@colname+')=1'
print @str
--取下一条记录
fetch next from DZCursor into @tablename, @colname
end
--关闭游标
close DZCursor
--删除游标引用
deallocate DZCursor

-----------------------------方法3

--先备份数据
EXEC SP_MSFOREACHTABLE N'
DECLARE @STR VARCHAR(8000)
SET @STR=
''''
SELECT @STR=@STR+
'' UPDATE ''+O.NAME+'' SET ''+C.NAME+''=DATEADD(DAY,-1,''+C.NAME+'') WHERE DATEPART(DW,''+C.NAME+'')=7 ''
FROM SYSCOLUMNS C JOIN SYSOBJECTS O ON C.ID=O.ID
WHERE O.ID=OBJECT_ID(
''?'') AND (C.xtype=58 or C.xtype=61)
--PRINT
''SET DATEFIRST 1''+@STR
EXEC(
''SET DATEFIRST 1''+@STR)
'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值