日期:2014-05-18  浏览次数:20509 次

SQL Server启动时向指定表里面添加数据,有时成功有时失败(知道咱们SQL 板块大神多)
SQL code


有这样这样一个存储过程 sp_startupForMedia
use master
go

IF exists(select 1 from sysobjects where [name] = 'sp_startupForMedia')
    drop proc sp_startupForMedia
GO

create procedure sp_startupForMedia
as
        --这里是清除表中数据
     delete from karaok..MediasSequence
     delete from karaok..MediasSequence2
     delete from karaok..MediasSequence3
     delete from karaok..MediasSequence4
     delete from karaok..MediasSequence5
     delete from karaok..MediasSequence6
    delete from karaok..MediasSequence7
    delete from karaok..MediasSequence8       
        
        --这里是向 karaok..MediasSequence 表中添加数据
     execute karaok..sp_dbmaintaintimer null, null, null, null, 1, 200
     execute karaok..sp_dbmaintaintimer null, null, 2, null, 1, 200
     execute karaok..sp_dbmaintaintimer null, null, 3, null, 1, 200
    execute karaok..sp_dbmaintaintimer null, null, 4, null, 1, 200
     execute karaok..sp_dbmaintaintimer null, null, 5, null, 1, 200
     execute karaok..sp_dbmaintaintimer null, null, 6, null, 1, 200
     execute karaok..sp_dbmaintaintimer null, null, 7, null, 1, 200
    execute karaok..sp_dbmaintaintimer null, null, 8, null, 1, 200

        --sp_dbmaintaintimer 代码就不贴了,主要是求个为什么会出现这个问题
    
GO

exec sp_procoption 'sp_startup', 'startup', 'true'

GO





遇到的问题是,在相同的情况下,这些MediasSequence表中有若干几率没有任何记录,虽然几率很小,但给用户造成了很大的困扰,由于把这个存储过程设置成了随SQL Server启动而自动运行,又没有办法跟踪,着实为难着了,求大神给个思路.........

------解决方案--------------------
1.你能否把那些数据写成一句,不需要这么多次调用存储过程.

2.你说的失败,是所有数据都没有插入,还是只有个别数据没有插入.如果是所有数据,则可能是sql server还为启动完毕,存储过程操作失败.如果是部分数据出错,这就不知道什么原因,不存在多用户同时操作这个数据吧?

------解决方案--------------------
雷石KTV ?
------解决方案--------------------
把失败的错误信息贴出来!
------解决方案--------------------
感常见你delete 可以用 truncate 其它的就不清楚了。

------解决方案--------------------
探讨
引用:

亲 可不可以把你的错误贴出来,你的语句描述感觉不是太明白


不是不贴,而是则个存储过程是随着sql server 启动而自动调用的,所以根本就看不到错误描述

------解决方案--------------------
把失败的错误信息贴出来!