是否可以在服务器中添加从数据库到文本文件的行?

时间:2010-06-02 05:09:30

标签: c# sql-server-2008

我在主服务器上有sql-server 2008数据库。

我有10个终端连接到这个服务器并对数据库起作用。

我需要通过任何终端向数据库中的每个新插入 - 在服务器中

行将插入文本文件(每行)

我能做到吗?

提前谢谢

1 个答案:

答案 0 :(得分:0)

我建议使用后插入触发器来执行此操作,有一些很好的示例:

http://msdn.microsoft.com/en-us/library/ms189799.aspx

如果在插入数据的表上创建触发器,则每次从任何终端插入时都会触发该触发器。在触发器内部,您可以使用pranay_stacker的建议将插入的详细信息写入日志文件。

作为我刚刚迅速掀起的事情的一个例子:

create TRIGGER dbo.productTrigger
    on dbo.Product
    after insert
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    declare @data nvarchar(255);

    DECLARE dataCursor CURSOR FAST_FORWARD FOR 
        select ProductCode from inserted;

    OPEN dataCursor
    FETCH NEXT FROM dataCursor
    INTO @data

    WHILE @@FETCH_STATUS = 0 BEGIN
        declare @cmd sysname;
        set @cmd = 'echo ' + @data + ' >> c:\test\var_out2.txt';
        exec master..xp_cmdshell @cmd, NO_OUTPUT;

        FETCH NEXT FROM dataCursor
        INTO @data
    END

    CLOSE dataCursor;
    DEALLOCATE dataCursor;
END

您当然必须修改数据库和表名等。

要记住的另一件事是你需要启用xp_cmdshell,因为出于安全原因,SQL服务器已将其切换,这可以通过以下方式完成:

EXEC master.dbo.sp_configure 'show advanced options', 1

RECONFIGURE

EXEC master.dbo.sp_configure 'xp_cmdshell', 1

RECONFIGURE
go

最后我注意到的最后一件事就是当我对c:\ var_out2.txt发出回音时,它给了我一个“拒绝访问”但是当我把它改成c:\ test \ var_out2.txt它工作得很好。所以请记住这一点。