[英]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.