簡體   English   中英

存儲過程SQL SERVER中的錯誤

[英]Error in stored procedure SQL SERVER

嗨,我想用大容量插入,一個csv文件和一個存儲過程插入數據,我的問題是當我使用參數而不是csv文件的路徑時,當我更改參數的路徑時遇到下一個錯誤

消息102,級別15,狀態1,過程carga_masiva,第7行[Batch Start Line 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'
     )

試試這個應該工作:

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執行。

我認為問題可能出在您要插入的位置,因為它期望的是字符串形式的位置,例如'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-分隔文件到sql服務器/

MS文檔在這里: https : //docs.microsoft.com/zh-cn/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM