2016-07-22 190 views
0

我想按照这里的例子,但是我的临时表有些问题。请帮忙? https://technet.microsoft.com/en-us/library/bb510625.aspx从字符串中转换日期和/或时间时转换失败。 SQL MERGE

创建存储过程我

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 

- 输出

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

这里是什么样子要发生的事情。您OUTPUT不匹配你插入(#MyTempTable)表的定义:

enter image description here

$action值是什么触发了错误,但它是所有不正确的。

您需要(a)更改#MyTempTable的定义或(b)通过添加缺失值(日期)来更正您的OUTPUT

相关问题