Lỗi hàng loạt Máy chủ SQL BULK INSERT


0

Tôi đang cố gắng để có một tập lệnh trong tệp bó của mình chạy Thủ tục lưu trữ SQL Server. Số lượng lớn Thủ tục lưu trữ sẽ chèn dữ liệu từ tệp .CSV vào bảng SQL Server. Khi tôi chạy Thủ tục lưu trữ trên SQL Server, nó sẽ chạy mà không gặp vấn đề gì. Tuy nhiên, khi tôi cố gắng làm cho nó hoạt động trong tệp bó của mình, nó đã thất bại

Kịch bản lô của tôi là

set STEP_NBR=STEP113
set SQL_Script_Name= CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP
set ERROR_MSG=%STEP_NBR% %SQL_Script_Name%
call "%DIR_BAT%\CreateLAFMessage.bat" "%~n0.bat-> %STEP_NBR% - Running %SQL_Script_Name%.sql" %_LAF_MSG_DETAILS%
SQLCMD.EXE %SQLCMD_VARS% -S%DB_SERVER_NAME% -d%DB_SP01_NAME% -w2048 -E -b -i"%DIR_SQL%\%SQL_Script_Name%.sql" -o"%DIR_LOG%\%SQL_Script_Name%.lst"
IF NOT %ERRORLEVEL%==0 GOTO ON_ERROR

Tập lệnh SQL gọi ra Thủ tục lưu trữ

DECLARE @return_value int
EXEC    @return_value = [dbo].[CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP]
SELECT  'Return Value' = @return_value
GO

Và thủ tục lưu trữ

USE [LVSDB_DRP01]
GO
/****** Object:  StoredProcedure [dbo]. 
[CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP]    Script Date: 9/10/2018 10:28:30 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP] 
as 
BEGIN

BEGIN TRANSACTION;

IF OBJECT_ID('staging.dbo.ADD_CUSTOMER_ORDER_STG_TMP', 'U') IS NULL
CREATE TABLE [staging].[dbo].[ADD_CUSTOMER_ORDER_STG_TMP](
[ITEM_INDX] [nvarchar](50) NOT NULL,
[LOC_INDX] [nvarchar](50) NOT NULL,
[CUST_ORD_INDX] [nvarchar](50) NOT NULL,
[CUST_ORD_LIN_NBR] [nvarchar](50) NOT NULL,
[CUST_ORD_ORD_DATE] [date] NOT NULL,
[CUST_ORD_QTY] [nvarchar](50) NULL,
[CUST_SHP_QTY] [nvarchar](50) NULL,
[SET_ITEM_INDX] [nvarchar](50) NOT NULL,
[HEADER_COMPONENT] [nvarchar](50) NOT NULL,
[BUCKET] [nvarchar](50) NOT NULL
)

IF OBJECT_ID('staging.dbo.ADD_CUSTOMER_ORDER_STG_TMP', 'U') IS NOT NULL
Truncate table staging.dbo.ADD_CUSTOMER_ORDER_STG_TMP;

IF OBJECT_ID('staging.dbo.ADD_CUSTOMER_ORDER_STG_TMP', 'U') IS NOT NULL
BULK INSERT staging.dbo.ADD_CUSTOMER_ORDER_STG_TMP
FROM '\\usashsmdbpcw02f\C$\SNI_Logility\ADD_CUSTOMER_ORDER_STG.csv'
WITH 
  (
    FIELDTERMINATOR = ',',
    FIRSTROW = 2
--    ROWTERMINATOR = '\r\n'
  );

COMMIT TRANSACTION;
END

Quy trình được lưu trữ chạy trên SQL Server, vì vậy tôi cho rằng lỗi của tôi nằm ở tập lệnh bó hoặc các quyền có khả năng cho đường dẫn tệp


Hãy thử thêm thông tin đăng nhập mà bạn đã xác định trên quyền truy cập SQL này mà bạn biết và có thể xác nhận có ít nhất đọc quyền truy cập vào \\usashsmdbpcw02f\C$\SNI_Logility\ADD_CUSTOMER_ORDER_STG.csvbằng cách thêm EXECUTE AS LOGIN = 'domain\username';vào SP ở đâu đó trước BULK INSERTcâu lệnh và xem điều đó có khác biệt gì không. Việc thực thi SP từ SSMS so với sqlcmd rất có thể có những khác biệt về bảo mật mà SP thực thi theo từng cách để chỉ định SP thay đổi thành bối cảnh bảo mật rõ ràng trong tập lệnh mà bạn biết có quyền truy cập vào chia sẻ tệp sẽ giải quyết ở cấp độ này .
Pimp Juice IT

Có lẽ cũng hữu ích khi tiết lộ thông báo lỗi nào bạn nhận được hoặc thấy khi nó không hoạt động như mong đợi. Hãy thử chạy từng lệnh trên dòng lệnh thay vì trong tập lệnh bó và tìm điểm mà bạn thấy lỗi đầu tiên khi bạn ngắt nó và chạy thủ công thông qua dòng lệnh và chỉnh sửa câu hỏi của bạn để biết về chi tiết này. Tôi có thể nghĩ ra một vài điều dựa trên cách diễn đạt hiện tại của bạn và nhận xét đầu tiên của tôi chỉ là một vì vậy có thể thêm chi tiết và cho biết bạn gặp lỗi gì và tại điểm nào trong quy trình khi bạn chạy các lệnh tương quan bằng tay thông qua dòng lệnh.
Pimp Juice IT

Và đừng quên rằng đó \\usashsmdbpcw02f\C$là một chia sẻ quản trị ẩn, vì vậy tôi cho rằng điều này có nghĩa là chạy SP trên SQL Server nơi nó hoạt động là vì khi bạn thực hiện nó từ đó, bối cảnh bảo mật đó có quyền truy cập vào chia sẻ quản trị viên ẩn đó trên usashsmdbpcw02fmáy được đặt tên.
Pimp Juice IT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.