Пакетная ошибка SQL Server BULK INSERT
353
baskinsr
Я пытаюсь добавить в командный файл сценарий, который запускает хранимую процедуру SQL Server. Массовая хранимая процедура вставляет данные из CSV-файла в таблицу SQL Server. Когда я запускаю хранимую процедуру на SQL Server, она запускается без проблем. Однако, когда я пытаюсь заставить его работать в моем командном файле, это терпит неудачу
Мой пакетный скрипт
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
Сценарий SQL вызывает хранимую процедуру
DECLARE @return_value int EXEC @return_value = [dbo].[CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP] SELECT 'Return Value' = @return_value GO
И хранимая процедура
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
Хранимая процедура выполняется на SQL Server, поэтому я предполагаю, что моя ошибка в пакетном скрипте или, возможно, разрешения для пути к файлу
Попробуйте добавить имя входа, которое вы определили для этого SQL-доступа, которое, как вы знаете, может подтвердить, по крайней мере, имеет доступ на чтение к `\\ usashsmdbpcw02f \ C $ \ SNI_Logility \ ADD_CUSTOMER_ORDER_STG.csv` путем добавления` EXECUTE AS LOGIN = 'domain \ username' ; `к SP где-то перед оператором` BULK INSERT` и посмотрите, имеет ли это какое-то значение. Выполнение SP из SSMS по сравнению с sqlcmd вполне может иметь различия в безопасности, которые SP выполняет для каждого способа, поэтому указание для SP, чтобы явно изменить контекст безопасности в сценарии, который, как вы знаете, имеет доступ к общей папке, должен разрешаться на этом уровне ,
Pimp Juice IT 6 лет назад
0
Вероятно, было бы полезно также раскрыть, какое сообщение об ошибке вы получаете или видите, когда оно не работает должным образом. Попробуйте выполнить каждую команду в командной строке, а не в пакетном скрипте, и найдите, в какой момент вы видите первую ошибку, когда разбиваете ее, и запускаете вручную через командную строку и [правите] свой вопрос, чтобы рассказать об этой детали. Я могу подумать о нескольких вещах, основанных на вашей текущей формулировке, и мой первый комментарий был всего лишь одним, поэтому, возможно, добавьте больше деталей и расскажите, какую ошибку вы получаете и в какой момент процесса, когда вы запускаете коррелированные команды вручную через командную строку.
Pimp Juice IT 6 лет назад
0
И не забывайте, что `\\ usashsmdbpcw02f \ C $` является скрытым общим ресурсом администратора, поэтому я предполагаю, что это означает запуск SP на SQL Server, где он работает, потому что когда вы делаете это оттуда, этот контекст безопасности имеет доступ к этому скрытый административный ресурс на именованном компьютере usashsmdbpcw02f
Pimp Juice IT 6 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
13
Почему подключение к SQL Management Studio занимает так много времени?
-
11
Как мне пакетно изменить дату получения информации в данных EXIF?
-
5
Как автоматически переместить файл на другой компьютер в сети?
-
-
11
Менее устрашающий интерфейс для SQL Server
-
3
Почему Windows 7 не устанавливает мой загруженный .NET 3.5 SP1?
-
4
Для чего нужен EX-режим для пакетной обработки?
-
1
Пакетное сканирование много картинок
-
2
Установка нескольких переменных среды в оболочке, созданной с помощью пакетного сценария Windows
-
2
Как я могу удалить файлы на КПК с помощью CMD / Batch file
-
3
Можно ли изменить значок файла bat MS-DOS?