begin tran
delete...
if @@error<> 0 rollback
insert ...
if @@error<> 0 rollback
commit
delete...
if @@error<> 0 rollback
insert ...
if @@error<> 0 rollback
commit
解决方案 »
- SQL 排序
- 在sql server 2000的查询分析器中如何使用 “sql server身份验证”登陆?
- sqlserveropenrowset导入Access数据库,发生Cannot start your application. The workgroup information file is missing or opened excl
- 大家帮忙看看!!急啊!!!
- SQL97数据库导数据到SQL2000的问题?急
- 【紧急求助】链接服务器,总是提示 sql不存在
- 模糊查询, "[" 字符查不着?
- sql丢数据,是怎么回事?
- 推荐一本好点的sql2000 书籍!~
- sqlserver 如何查询90万记录中的 第500到第604条数据记录?
- 浮点型数据,如何在查询结果中,保留二位小数
- 我想问一下如何写一个存储过程可以插入数据阿??
我想應該這樣寫吧
select * into table_target from table_source
--注意,有一定危险性,使用前先备份alter database 你的数据库名 set recovery BULK_LOGGED
goinsert into table_target select * from table_source
goalter database 你的数据库名 set recovery full
go
若是指定 FULL,則會提供完全的保護來防止媒體錯誤的發生。如果資料檔毀損,則媒體復原可回復所有認可的交易。
若是指定 BULK_LOGGED,則對於某些大範圍或大量作業而言,保護措施以避免媒體錯誤會結合最佳效能與最少記錄記憶體用量。這些作業包括 SELECT INTO、大量負載作業 (bcp 和 BULK INSERT)、CREATE INDEX 以及文字和影像作業 (WRITETEXT 和 UPDATETEXT)。在大量記錄復原模型之下,整體類別 (Class) 的記錄最小,無法以作業基礎來控制作業。若是指定 SIMPLE,則提供使用最少記錄空間的簡單備份策略。當伺服器故障復原不再需要記錄空間時,會自動重複利用此空間。重要事項 簡單復原模型比其他兩種模型更容易管理,但是如果資料檔毀損,其資料遺失的風險較高。所有最近資料庫的變更或差異式資料庫備份若都遺失,則必須手動重新輸入。預設的復原模型取決於 model 資料庫的復原模型。若要變更新資料庫的預設值,請使用 ALTER DATABASE 來設定 model 資料庫的復原選項。
另一方面,我导数的目标数据库,有几十个用户在同时操作,取数查询,sqlserver是专做查询用的。
可以使用 insert into 目标表 select * from ..源表 ,但内存占用太大,我把我的语句贴出,看有什么办法可提高性能
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER proc usp_cw_f0411
as
----------------------------------
--更新应付F0411
------------------
DECLARE @adt_bgn datetime --前推日期
declare @adt_end datetime --当前日期
declare @ai_bgn int --前推日期对应的数值
declare @ai_end int --当前日期对应的数值
set @adt_bgn = dateadd(day, -30,getdate())
set @adt_end = getdate()
set @ai_bgn =
(year(@adt_bgn)/100 - 19 )*100000 + ( year(@adt_bgn) - floor(year(@adt_bgn)/1000)*1000 )*1000 +
datediff(day, (convert(char(4),year(@adt_bgn))+'/01/01 00:00' ),@adt_bgn) + 1
set @ai_end =
(year(@adt_end)/100 - 19 )*100000 + ( year(@adt_end) - floor(year(@adt_end)/1000)*1000 )*1000 +
datediff(day, (convert(char(4),year(@adt_end))+'/01/01 00:00' ),@adt_end) + 1
--set @ai_bgn = DATEDIFF( DAY, '2003/7/31' , @adt_bgn ) + 103212
--set @ai_end = DATEDIFF( DAY, '2003/7/31' , @adt_end ) + 103212
while @ai_bgn <= @ai_end
begin
-- begin tran t_f0411 delete from F0411
where datediff(day,RPDSVJ,@adt_bgn) =0 if @@error <> 0
begin
-- rollback tran t_f0411
insert into daily_alter
values('f0411', getdate() , @adt_bgn , @@error )
return
end insert into F0411
SELECT A.RPKCO,
A.RPDOC,
A.RPDCT,
A.RPSFX,
A.RPAN8,
CASE
WHEN A.RPDIVJ >50000 THEN
dateadd(day ,( RPDIVJ - floor(RPDIVJ/1000)*1000 - 1 ) ,
convert(datetime,convert(char(4),1900 + floor(RPDIVJ/1000) )+'/01/01 00:00'))
else convert(datetime,'1950/1/1')
END AS 'RPDIVJ',
CASE
WHEN A.RPDSVJ > 50000 THEN
dateadd(day ,( RPDSVJ - floor(RPDSVJ/1000)*1000 - 1 ) ,
convert(datetime,convert(char(4),1900 + floor(RPDSVJ/1000) )+'/01/01 00:00'))
else convert(datetime,'1950/1/1')
END AS 'RPDSVJ', CASE
WHEN A.RPDDJ > 50000 THEN
dateadd(day ,( RPDDJ - floor(RPDDJ/1000)*1000 - 1 ) ,
convert(datetime,convert(char(4),1900 + floor(RPDDJ/1000) )+'/01/01 00:00'))
else convert(datetime,'1950/1/1')
END AS 'RPDDJ',
A.RPICU,
A.RPICUT, CASE
WHEN RPDICJ > 50000 THEN
dateadd(day ,( RPDICJ - floor(RPDICJ/1000)*1000 - 1 ) ,
convert(datetime,convert(char(4),1900 + floor(RPDICJ/1000) )+'/01/01 00:00'))
else convert(datetime,'1950/1/1')
END AS 'RPDICJ',
A.RPPST,
A.RPAG/100.00,
A.RPAAP/100.00,
A.RPCRCD,
A.RPPOST,
A.RPRMK ,
A.RPGLC ,
A.RPRP3 ,
A.RPPO ,
A.RPDCTA
FROM JDE..PRODDTA.F0411 A
where rpdsvj = @ai_bgn if @@error <> 0
begin
-- rollback tran t_f0411
insert into daily_alter
values('f0411', getdate() , @adt_bgn , @@error )
return
end
else
begin
-- commit tran t_f0411
insert into daily_alter
values('f0411', getdate() , @adt_bgn , @@error )
end set @adt_bgn = dateadd(day,1,@adt_bgn)
-- set @ai_bgn = @ai_bgn + 1
set @ai_bgn =
(year(@adt_bgn)/100 - 19 )*100000 + ( year(@adt_bgn) - floor(year(@adt_bgn)/1000)*1000 )*1000 +
datediff(day, (convert(char(4),year(@adt_bgn))+'/01/01 00:00' ),@adt_bgn) + 1endGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO