2016-07-22 17 views
0

私はここの例に従おうとしていますが、私の一時テーブルに何か問題があります。助けてください? https://technet.microsoft.com/en-us/library/bb510625.aspx文字列から日付および/または時刻を変換するときに変換に失敗しました。 SQL MERGE

私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 

を作成する - 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 

ためTEMPTABLEを作成します - 手順をテストし、結果を返します。

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' 

エラーメッセージ:ここに

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

問題は次のとおりです: 'OUTPUT deleted。*、$ action、inserted。* INTO #MyTempTable;'あなたの 'OUTPUT'は'#MyTempTable'の定義と一致しません – Nicarus

答えて

0

が起こっされるように見えるものです。

enter image description here

$action値がエラーをトリガしているものであるが、それはすべて間違っている:あなたのOUTPUTあなたは(#MyTempTable)に挿入されているテーブルの定義と一致しません。

(a)#MyTempTableの定義を変更するか、(b)欠損値(日付)を追加してOUTPUTを修正する必要があります。

関連する問題