2016-07-22 8 views
0

Ich versuche, dem Beispiel hier zu folgen, aber etwas stimmt nicht mit meiner Temp-Tabelle. bitte helfen? https://technet.microsoft.com/en-us/library/bb510625.aspxKonvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus Zeichenkette. SQL MERGE

erstellen mein Sproc

CREATE PROCEDURE gssenv.InsertMorphoDevice 
    @Name nvarchar(MAX), 
    @Description nvarchar(MAX), 
    @Location nvarchar(MAX), 
    @AssetID nvarchar(MAX), 
    @TimeZone nvarchar(MAX), 
    @Hostname nvarchar(50), 
    @Port int, 
    @Status int, 
    @ID nvarchar(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    MERGE gssenv.Morpho AS target 
    USING (SELECT @ID,@Name,@Description,@Location,@AssetID,@TimeZone,@Hostname,@Port,@Status) AS source (ID,Name,Description,Location,AssetID,TimeZone,Hostname,Port,Status) 
    ON (target.ID = source.ID) 
    WHEN MATCHED THEN 
     UPDATE 
     SET Hostname = source.Hostname, 
      Name =  source.Name, 
      Description = source.Description, 
      Location = source.Location, 
      AssetID = source.AssetID , 
      Port = source.Port, 
      Status = source.Status, 
      ID = source.ID 

WHEN NOT MATCHED THEN 
    INSERT (ID,Name,Description,Location,AssetID,TimeZone,Hostname,Port,Status) 
    VALUES (source.ID,source.Name,source.Description,source.Location,source.AssetID,source.TimeZone,source.Hostname,source.Port,source.Status) 
    OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable; 
END; 
GO 

- Erstellen Sie eine temptable für OUTPUT

CREATE TABLE #MyTempTable 
    (ExistingDescription nvarchar(MAX), 
    ExistingName nvarchar(MAX), 
    ExistingLocation nvarchar(MAX), 
    ExistingAssetID nvarchar(MAX), 
    ExistingHostname nvarchar(MAX), 
    ExistingTimeZone nvarchar(MAX), 
    [ExistingID] nvarchar(MAX), 
    ExistingPort int, 
    ExistingStatus int, 
    ExistingDate datetime, 
    ActionTaken nvarchar(10), 
    NewDescription nvarchar(MAX), 
    NewName nvarchar(MAX), 
    NewLocation nvarchar(MAX), 
    NewAssetID nvarchar(MAX), 
    NewHostname nvarchar(MAX), 
    NewTimeZone nvarchar(MAX), 
    [NewID] nvarchar(MAX), 
    NewPort int, 
    NewStatus int, 
    NewDate datetime 
    ); 
GO 

- Testen Sie das Verfahren und die Ergebnisse zurück.

EXEC gssenv.InsertMorphoDevice @Name = 'ABC', @Description = 'Name',@Location = 'test',@AssetID= 'NEWASSSETID', @Hostname = 'MPK40-PSEC-BIO-0024AE01B5C5.thefacebook.com', 
         @Port = '1234',@Status =2,@TimeZone = 'tzsdf', @ID = '2E4F5071-EAD7-4E22-8AB7-36AB20C2A33A' 

Fehlermeldung:

Msg 241, Level 16, State 1, Procedure InsertMorphoDevice, Line 15 [Batch Start Line 74] 
    Conversion failed when converting date and/or time from character string. 
+0

Das Problem ist damit: 'OUTPUT gelöscht. *, $ Aktion, eingefügt. * INTO #MyTempTable;' Ihre 'OUTPUT' stimmt nicht mit der Definition von' # MyTempTable' überein – Nicarus

Antwort

0

Hier ist, was zu geschehen sieht. Ihr OUTPUT entspricht nicht der Definition der Tabelle, die Sie einfügen in (#MyTempTable):

enter image description here

Der $action Wert ist, was den Fehler auslöst, aber es ist alles falsch.

Sie müssen entweder (a) die Definition von #MyTempTable ändern oder (b) Ihre OUTPUT korrigieren, indem Sie die fehlenden Werte (die Daten) hinzufügen.