方法很多:
1:方法,可以写一个DLL,用存储过程调用DLL,
DLL 负责你的应用程序处理
2:方法: 可以写一触发器,删除记录的时候,做相应的文件储量,
例如:
==触发器删除文件操作方法.....
/*创建测试表,及插入测试表文件路径*/
create table t(id int identity(1,1),msg nvarchar(100))
insert into t select 'D:\test\test1.txt'
insert into t select 'D:\test\test2.txt'
go
/*创建触发器*/
create trigger trigger_test on t
for delete
as
declare @a nvarchar(100)
select @a=msg from deleted
exec ('master..xp_cmdshell''del '+@a+''',no_output')
go
/*测试,删除D:\test\test1.txt记录并删除相应文件*/
delete t where msg='D:\test\test1.txt'
/*删除测试表*/
drop table t
应用程序可以判断这个文件是不是存在后,再处理...
3:方法
判断文件是否存在的方法这么写:
declare @file_exists int
exec master..xp_fileexist 'c:\autoexec.bat', @file_exists output
select @file_exists
具体问题,我不是很清楚。你的应用程序要做什么操作!!
1:方法,可以写一个DLL,用存储过程调用DLL,
DLL 负责你的应用程序处理
2:方法: 可以写一触发器,删除记录的时候,做相应的文件储量,
例如:
==触发器删除文件操作方法.....
/*创建测试表,及插入测试表文件路径*/
create table t(id int identity(1,1),msg nvarchar(100))
insert into t select 'D:\test\test1.txt'
insert into t select 'D:\test\test2.txt'
go
/*创建触发器*/
create trigger trigger_test on t
for delete
as
declare @a nvarchar(100)
select @a=msg from deleted
exec ('master..xp_cmdshell''del '+@a+''',no_output')
go
/*测试,删除D:\test\test1.txt记录并删除相应文件*/
delete t where msg='D:\test\test1.txt'
/*删除测试表*/
drop table t
应用程序可以判断这个文件是不是存在后,再处理...
3:方法
判断文件是否存在的方法这么写:
declare @file_exists int
exec master..xp_fileexist 'c:\autoexec.bat', @file_exists output
select @file_exists
具体问题,我不是很清楚。你的应用程序要做什么操作!!
', no_output
以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行 xp_cmdshell 的权限。说明 在 Microsoft® Windows® 98 操作系统中执行 xp_cmdshell 时,将不把 xp_cmdshell 的返回代码设置为唤醒调用的可执行文件的进程退出代码。返回代码始终为 0。
语法
xp_cmdshell {'command_string'} [, no_output]参数
'command_string'是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(8000) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。no_output是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。返回代码值
0(成功)或 1(失败)
ON 你的表
FOR INSERT
AS
BEGIN
RAISERROR (50009, 16, 10)
END
--大致过程就是这样的!
感谢各位大侠的回答...... 举个例子是这样:
比如我的服务器数据库表为: VehcilePass
字段中有PassID(自增长序列号),Station(地点编号),..... 当联网的其他点的数据采集程序将实时经过的车辆信息写入这张表的时候
我要把PassID和Station发送给我的应用程序(服务器本机运行) 以前定时我用扫描最大ID号变化来检测是否有新记录加入,,,
有时没有新信息我也要扫描,,,
有时新信息很多扫描的时候一下子跳过好多记录...
总觉得这种方式不太好... 我想到了在触发器中调用外部应用程序可以发送消息给我的应用程序,
但是因为采集的信息很多,这样方式耗费系统资源太大,启动一个进程太慢... 有没有什么系统命令可以发送消息给我的程序或者广播消息我的程序可以接收到...
或者有没有什么其他方式可以通知我的应用程序数据库有新信息加入...
而且这种方式耗费系统资源比较小一些...适应大量记录加入的情况(平均在0.5秒内完成)... 谢谢各位回复...
明天不管有没有结果都会结贴...
找到合适的答案开贴另送100分...
谢谢大家...
上面有些问题没有说清: 当联网的其他点的数据采集程序将实时经过的车辆信息写入这张表的时候
在数据库服务器上
要把检测到的新加入记录的PassID和Station发送给我的应用程序(服务器本机运行)
程序中先记录select count(*) from 表的值,
再次记录一个select count(*) from 表的值,如果比原来的那个大就说明增加了记录。
:funsuzhou(羡米奇)(装修ing,成为专家中!) 呵呵 我是想找一种效率比较高的方法... 我以前使用记录最大的PassID号检查有没有更大的ID号也可以检测出来新记录加入... 这样有很多空扫描...我的表中记录很多的...是应用在实际中的... 用是能用,但是总觉得不爽...
:zhangyu028(天哪,这么多人) 我的记录加入数目多的时段非常多,少的时段则不多,平均起来可能超过0.5-2秒一条啊,,,
这样太频繁拉...
在等等是否有好办法呀...