【问题标题】:Error in stored procedure SQL SERVER存储过程 SQL SERVER 中的错​​误
【发布时间】:2018-10-04 11:56:53
【问题描述】:

您好,我想通过批量插入、csv 文件和存储过程插入数据, 我的问题是当我使用参数而不是 csv 文件的路径时,当我更改参数的路径时,我得到下一个错误

消息 102,级别 15,状态 1,过程 carga_masiva,第 7 行 [批处理 开始第 7 行] '@ruta' 附近的语法不正确。消息 319,第 15 级,状态 1、程序carga_masiva,第7行[Batch Start Line 7]不正确 关键字'with'附近的语法。如果这个语句是公用表 表达式、xmlnamespaces 子句或更改跟踪上下文 子句,前面的语句必须以分号结束。

这是我的存储过程:

USE [prueba]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[carga_masiva]
--Parametros que utilizara el procedimiento almacenado
    @ruta nvarchar(250)
AS
--Query que realizara el procedimiento almacenado
    SET NOCOUNT ON;
    BULK INSERT USUARIO
    FROM @ruta 
    WITH 
    ( 
      FIELDTERMINATOR= ';', 
      ROWTERMINATOR = '\n'
     )

【问题讨论】:

  • 在 WITH 之前添加一个分号,即将 WITH 更改为 ;WITH。这应该会有所帮助。
  • @DEEPAKLAKHOTIA 它不会 - 它会破坏语句并且批量插入需要 with。如果它是 CTE,你需要打破它。问题似乎与 from 声明有关
  • 前面的语句必须以分号结束。

标签: sql sql-server sql-server-2008


【解决方案1】:

试试这个应该可以:

ALTER PROCEDURE [dbo].[carga_masiva] @ruta nvarchar(250) AS
DECLARE @bulkinsert NVARCHAR(2000), @filepath nvarchar(500)
SET @filepath = @ruta
SET
  NOCOUNT ON;

SET @bulkinsert = 
       N'BULK INSERT USUARIO FROM ''' + 
       @filepath + 
       N''' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'


EXEC sp_executesql @bulkinsert

您可以考虑将 BULK INSERT 语句构建为字符串,然后将其作为动态 SQL 执行。

【讨论】:

  • 感谢您的回答,我将尝试使用您的示例并更新问题的状态
【解决方案2】:

我认为问题可能与您插入的位置有关,因为它期望将位置作为字符串,例如'C:\Doc' 而不是 C:\Doc。

动态 SQL 将是一个选项,例如

USE [prueba];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[carga_masiva]
--Parametros que utilizara el procedimiento almacenado
@ruta NVARCHAR(250)
AS
--Query que realizara el procedimiento almacenado
     SET NOCOUNT ON;
     DECLARE @SQL NVARCHAR(1024);
     SET @SQL = '

    BULK INSERT USUARIO
    FROM '+CHAR(39)+@ruta+CHAR(39)+'
    WITH 
    ( 
      FIELDTERMINATOR= '';'', 
      ROWTERMINATOR = ''\n''
     )
';
     EXEC sp_executesql
          @SQL;

Pinal Dave 在这里有一个方便的帖子:https://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/

MS Docs 在这里:https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2015-06-14
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多