在sql server db中导入txt的存储过程

发布于 2024-09-01 06:08:50 字数 494 浏览 4 评论 0原文

我每天必须从文本文件(制表符分隔)在数据库中插入新记录。 我试图将其变成一个存储过程,其中包含一个可供文件读取数据的参数。

CREATE PROCEDURE dbo.UpdateTable

    @FilePath

    BULK INSERT TMP_UPTable 
    FROM @FilePath
    WITH 
    ( 
        FIRSTROW = 2, 
        MAXERRORS = 0, 
        FIELDTERMINATOR = '\t', 
        ROWTERMINATOR = '\n' 
    )

    RETURN

然后我会从我的代码 (C#) 调用此存储过程,指定要插入的文件。

这显然是行不通的,那么我该怎么做呢?

需要明确的是,这里的问题是我无法将参数 @FilePath 传递给 FROM 子句,或者至少我不知道如何传递。

I have to insert new records in a database every day from a text file ( tab delimited).
I'm trying to make this into a stored procedure with a parameter for the file to read data from.

CREATE PROCEDURE dbo.UpdateTable

    @FilePath

    BULK INSERT TMP_UPTable 
    FROM @FilePath
    WITH 
    ( 
        FIRSTROW = 2, 
        MAXERRORS = 0, 
        FIELDTERMINATOR = '\t', 
        ROWTERMINATOR = '\n' 
    )

    RETURN

Then i would call this stored procedure from my code (C#) specifying the file to insert.

This is obviously not working, so how can i do it ?

Just to be clear the problem here is that i can't pass the parameter @FilePath to the FROM clause, or at least i don't know how.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枯寂 2024-09-08 06:08:50

抱歉,我误会了。
您需要动态创建 SQL 语句,然后执行它:

    CREATE procedure dbo.UpdateTable

    @FilePath varchar(max)
AS

 declare @sql varchar(max)
 declare @parameters varchar(100)
 set @parameters = 'FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ''\\t'', ROWTERMINATOR = ''\\n'' '
 SET @SQL = 'BULK INSERT TMP_UPTable FROM ' + @FilePath + @parameters

EXEC (@SQL)

RETURN

Sorry, I misunderstood.
You need to create the SQL statement dynamically and then execute it:

    CREATE procedure dbo.UpdateTable

    @FilePath varchar(max)
AS

 declare @sql varchar(max)
 declare @parameters varchar(100)
 set @parameters = 'FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ''\\t'', ROWTERMINATOR = ''\\n'' '
 SET @SQL = 'BULK INSERT TMP_UPTable FROM ' + @FilePath + @parameters

EXEC (@SQL)

RETURN
静谧 2024-09-08 06:08:50

抱歉,如果我来晚了,但我建议采用不同的方法 - 在 C# 应用程序中打开文件并将其转换为更 SQL 友好的内容、DataTable 甚至 XML。在 C# 中,您可以完全控制如何解析文件。然后编写存储过程来接受您的 DataTable 或 XML。 DataTable 更好,但不能与实体框架一起使用。

关于如何通过加入此类输入来执行插入,有很多帮助,并且 SQL Server 针对集合操作进行了优化。

Sorry if I am late here, but I would suggest a different approach - open the file in your C# application and convert it to something more SQL-friendly, a DataTable or even XML. In C# you have complete control over how you parse the files. Then write the stored procedure to accept your DataTable or XML. A DataTable is preferable, but cannot be used with Entity Framework.

There is lots of help around of how to do inserts by joining to this sort of input, and SQL Server is optimised for set operations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文