MSSQL的一些常功能

                              (经常要用到触发器,但有时又不需要用到,那应该如何暂时停用呢!)
 
  ALTER TABLE XXX表 DISABLE TRIGGER ALL  --把XXX表的所有触发器停用
  ALTER TABLE XXX表 ENABLE TRIGGER ALL  --把XXX表的所有触发器启用
  ALTER TABLE XXX表 DISABLE/ENABLE TRIGGER [test触发器名称]  --把XXX表中的名称为[test]的触发器停用/启用 ,

 把字段内容导出为文件(是SQL语句运行脚本的混合使用)

CREATE PROCEDURE 保存字段到文件 AS
begin
DECLARE @myRecordset int,@Stream int,@Fields int,@Field int --对象定义
DECLARE @value binary(8000),@Len int,@i int
DECLARE @Linkstr varchar(200),@Querystr varchar(200)
DECLARE @hr int,@src sql_variant, @desc sql_variant --错误信息变量
--连接字符
set @Linkstr='Provider=SQLOLEDB.1;Data Source=(local);Initial Catalog=president;user id =sa;password='
set @Querystr='Select top 1 标志图 from 公司注册资料'  --你的字段!
--建立数据集
EXEC @hr = sp_OACreate 'ADODB.Recordset', @myRecordset OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @myRecordset, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
   RETURN
END
----建立数据流
EXEC @hr = sp_OACreate 'ADODB.Stream', @Stream OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END
--设置数据流的工作状态
EXEC @hr = sp_OASetProperty @Stream, 'mode',3 --读/写状态
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END
EXEC @hr = sp_OASetProperty @Stream, 'type', 1 --1是流 2是文本
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END
EXEC @hr = sp_OAMethod @Stream,'open'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

--打开数据集
EXEC @hr = sp_OAMethod @myRecordset,'open',null,@Querystr,@Linkstr
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @myRecordset, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END
--获取数据集的字段的集合
EXEC @hr = sp_OAGetProperty @myRecordset, 'Fields', @Fields OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @myRecordset, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END
--获取字段
EXEC @hr = sp_OAGetProperty @Fields, 'item(0)', @Field OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Fields, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

--获取字段值的长度{ActualSize}
EXEC @hr = sp_OAGetProperty @Field, 'ActualSize', @Len OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Field, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

 set @i=0
 
 while @Len > @i
  begin
   --获取字段值
    EXEC @hr = sp_OAGetProperty @Field, 'GetChunk', @Value OUT,8000
      IF @hr <> 0
       BEGIN
        EXEC sp_OAGetErrorInfo @Field, @src OUT, @desc OUT 
          SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
          RETURN
       END
   --写入流中
    EXEC @hr = sp_OAMethod @Stream,'write',null,@Value
      IF @hr <> 0
       BEGIN
        EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
        SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
        RETURN
       END
   set @i=@i+8000
  end
--切断流中无用的数据
EXEC @hr = sp_OASetProperty @Stream,'Position',@Len
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
   RETURN
END
EXEC @hr = sp_OAMethod @Stream,'SetEos'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
   RETURN
END

--保存为文件
EXEC @hr = sp_OAMethod @Stream,'SaveToFile',null,'X:\XXX',2  
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @Stream, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
   RETURN
END

exec sp_OADestroy @myRecordset
exec sp_OADestroy @Stream
exec sp_OADestroy @Fields
exec sp_OADestroy @field

end
                                

查看回复