Ich arbeite derzeit an einem Projekt, in dem der Client ein einzelnes Feld haben muss, in diesem Fall ein Stadtstaat und Zip-Feld in 3 separate Felder in einer Ansicht aufgeteilt. Ich habe Code gefunden, der das gut macht, aber das Problem, auf das ich gestoßen bin, ist, dass der Stadtstatus und die Zip-Daten nicht immer in derselben Spalte sind. Manchmal befindet es sich in der Spalte shp_to_addr_2 und manchmal in der Spalte shp_to_addr_3.Parsing Adressdaten, die nicht in einer Spalte sein können
Der Code führt zu einem Parameterfehler, weil er manchmal mit einem Nullwert endet. Ich habe versucht, eine Variable zu verwenden, um die Spalte mit den Daten darin zu fangen, aber am Ende mit diesem lästigen Fehler. Hier ist der Code, den ich als gespeicherte Prozedur eingerichtet habe, mit der Fehlermeldung. Was mache ich falsch?
USE [database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[USER_SP_VI_USER_UPS_TRACK_2]
@address VARCHAR(50) = NULL
AS
SET NOCOUNT ON
BEGIN
UPDATE VI_USER_UPS_TRACK_2
SET @address = shp_to_addr_3
IF @address IS NULL
SELECT ord_no, cust_no, ord_dat, shp_to_nam, shp_to_addr_1, shp_to_addr_2, shp_to_addr_3, ord_typ,
(LEFT(shp_to_addr_2, CHARINDEX(',', shp_to_addr_2) - 1)) AS City, LEFT(LTRIM(SUBSTRING(shp_to_addr_2,
CHARINDEX(',', shp_to_addr_2) + 1, 4)), 2) AS ST, RIGHT(RTRIM(shp_to_addr_2), CHARINDEX(' ', REVERSE
(RTRIM(shp_to_addr_2))) - 1) AS Zip
FROM VI_USER_UPS_TRACK_2
ELSE IF @address IS NOT NULL
SELECT ord_no, cust_no, ord_dat, shp_to_nam, shp_to_addr_1, shp_to_addr_2, shp_to_addr_3, ord_typ,
(LEFT(shp_to_addr_3, CHARINDEX(',', shp_to_addr_3) - 1)) AS City, LEFT(LTRIM(SUBSTRING(shp_to_addr_3,
CHARINDEX(',', shp_to_addr_3) + 1, 4)), 2) AS ST, RIGHT(RTRIM(shp_to_addr_3), CHARINDEX(' ', REVERSE
(RTRIM(shp_to_addr_3))) - 1) AS Zip
FROM VI_USER_UPS_TRACK_2
END
Das Verfahren erstellt, aber wenn ich diese bekommen ausgeführt:
Msg 537, Ebene 16, Status 2 Prozedur USER_SP_VI_USER_UPS_TRACK_2, Zeile 13 Ungültige Längenparameter nach links oder SUBSTRING-Funktion übergeben.
müssen Sie Ihren Code debuggen.Verstarten Sie, um zu verstehen, welche Parameter links/Right, Teilzeichenfolge takes.Then überprüfen Sie Ihren Code, um zu sehen, wenn Sie einen ungültigen Parameter übergeben, ist es schwer für uns zu debuggen, da es keine gibt Aktuelle Daten zum Testen – TheGameiswar
Ich würde empfehlen, 'select' anstelle von' update' zu verwenden, wenn Daten in Variablen importiert werden. Die Verwendung von update führt zu mehr Verwirrung, da Sie die Tabelle nicht aktualisieren. –
Dieser View-Code funktioniert, wenn Daten in shp_to_addr_3, aber wenn in der anderen Spalte shp_to_addr_2, es Fehler. SELECT ord_no, CUST_NO, ord_dat, shp_to_nam, shp_to_addr_1, shp_to_addr_2, shp_to_addr_3, ord_typ, (LEFT (shp_to_addr_3, CHARINDEX ('', shp_to_addr_3) - 1)) AS City, LEFT (LTRIM (SUBSTRING (shp_to_addr_3, CHARINDEX (' ' shp_to_addr_3) + 1, 4)), 2), wie ST, rechts (RTRIM (shp_to_addr_3), CHARINDEX ('', REVERSE (RTRIM (shp_to_addr_3))) - 1) als Zip FROM VI_USER_UPS_TRACK_2 –