Stapelfehler SQL Server BULK INSERT
475
baskinsr
Ich versuche, ein Skript in meiner Stapeldatei zu haben, in dem eine gespeicherte Prozedur von SQL Server ausgeführt wird. Die gespeicherte Prozedur fügt Daten aus einer CSV-Datei in eine SQL Server-Tabelle ein. Wenn ich die gespeicherte Prozedur auf SQL Server ausführen, wird sie ohne Probleme ausgeführt. Wenn ich jedoch versuche, es in meiner Batchdatei zum Laufen zu bringen, schlägt dies fehl
Mein Batch-Skript ist
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
Das SQL-Skript ruft die gespeicherte Prozedur auf
DECLARE @return_value int EXEC @return_value = [dbo].[CST_SN_ADD_SPS_CUSTOMER_ORDER_STG_TMP] SELECT 'Return Value' = @return_value GO
Und das gespeicherte Verfahren
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
Die gespeicherte Prozedur wird auf SQL Server ausgeführt, daher gehe ich davon aus, dass mein Fehler im Batch-Skript oder potenziellen Berechtigungen für den Dateipfad liegt
Fügen Sie ein Login hinzu, das Sie für diesen SQL-Zugriff definiert haben, und Sie können bestätigen, dass es mindestens Lesezugriff auf die "\\ usashsmdbpcw02f \ C $ \ SNI_Logility \ ADD_CUSTOMER_ORDER_STG.csv" hat, indem Sie "EXECUTE AS LOGIN =" domain \ username "hinzufügen. ; `zum SP irgendwo vor der` BULK INSERT`-Anweisung und sehen, ob das einen Unterschied macht. Bei der Ausführung des SP von SSMS im Vergleich zu sqlcmd kann es sehr wohl Sicherheitsunterschiede geben, die SP auf unterschiedliche Weise ausführt, so dass angegeben wird, dass der SP explizit in einen Sicherheitskontext innerhalb des Skripts wechselt, von dem Sie wissen, dass der Zugriff auf eine Dateifreigabe auf dieser Ebene aufgelöst werden soll .
Pimp Juice IT vor 6 Jahren
0
Es ist möglicherweise hilfreich, auch anzugeben, welche Fehlermeldung Sie erhalten oder sehen, wenn die Fehlermeldung nicht wie erwartet funktioniert. Versuchen Sie, jeden Befehl in der Befehlszeile und nicht im Batch-Skript auszuführen. Finden Sie heraus, an welcher Stelle der erste Fehler angezeigt wird, wenn Sie ihn aufteilen, und führen Sie ihn manuell über die Befehlszeile und Ihre Frage aus, um Informationen zu diesem Detail zu erhalten. Ich kann mir ein paar Dinge überlegen, die auf Ihrer aktuellen Formulierung basieren. Mein erster Kommentar war nur ein einziges. Fügen Sie also möglicherweise weitere Details hinzu und sagen Sie, welchen Fehler Sie an welchem Punkt des Prozesses erhalten, wenn Sie die korrelierten Befehle manuell über die Befehlszeile ausführen.
Pimp Juice IT vor 6 Jahren
0
Und vergessen Sie nicht, dass \\ usashsmdbpcw02f \ C $ `eine versteckte Administratorfreigabe ist. Ich gehe davon aus, dass Sie den SP auf dem SQL Server ausführen, wo er funktioniert. Wenn Sie ihn von dort aus ausführen, hat der Sicherheitskontext Zugriff darauf versteckte Admin-Freigabe auf der `usashsmdbpcw02f`-Maschine.
Pimp Juice IT vor 6 Jahren
0
0 Antworten auf die Frage
Verwandte Probleme
-
13
Warum dauert die Verbindung von SQL Management Studio so lange?
-
11
Wie kann ich die Datumsangaben in den EXIF-Daten stapelweise ändern?
-
5
Wie wird eine Datei automatisch auf einen anderen PC im Netzwerk verschoben?
-
11
Weniger einschüchterndes Frontend für SQL Server
-
3
Warum installiert Windows 7 mein heruntergeladenes .NET 3.5 SP1 nicht?
-
4
Wozu dient der EX-Modus für die Stapelverarbeitung?
-
1
Batch-Scan viele Bilder
-
2
Festlegen mehrerer Umgebungsvariablen in einer Shell, die über ein Windows-Batch-Skript erstellt wir...
-
2
Wie kann ich Dateien auf einem PDA mit einer CMD / Batch-Datei löschen?
-
3
Ist es möglich, das Symbol einer MS-DOS-Bat-Datei zu ändern?