簡體   English   中英

使用存儲過程將查詢結果插入表時出現問題

[英]Trouble using stored procedure to insert query results into table

我正在嘗試對某些表進行測試,但似乎一直遇到錯誤。

我正在嘗試運行以下存儲過程:

INSERT INTO [Customer].[TableA_test] ([CustomerID], [VisitID], [TransactionId], [ArrivalDT], [DataA], [DataB], [DataC], [SnapDate]) 
    SELECT
        b.CustomerID,   
        b.VisitID,
        b.TransactionID,
        b.ArrivalDT,
        b.DataA,
        b.DataB,
        b.DataC,
        SnapDate = GETDATE()
    FROM 
        [Customer].[TableA_test] a
    LEFT JOIN 
        [Customer].[TableB] b ON a.VisitID = b.VisitID
                              AND a.TransactionId = b.TransactionID
    WHERE 
        a.TransactionID IS NULL

該過程旨在從查詢中獲取結果並將其插入到TableA中。 表A具有與表B完全相同的列和數據類型。 當我嘗試執行存儲過程(上面提供的代碼)時,出現以下錯誤:

消息241,級別16,狀態1,過程InsertTo_TableA_test,第27行
從字符串轉換日期和/或時間時轉換失敗。

我所有的日期列都設置為datetime數據類型: ArrivalDTSnapDate TableA_testing和TableB具有完全相同的列名和數據類型。

有什么我想念的嗎?

這是[客戶]的表信息。[TableA_test]:

CREATE TABLE [Customer].[TableA_test]
(
    [TransactionID] [VARCHAR](254) NULL,
    [VisitID] [VARCHAR](254) NULL,
    [ArrivalDT] [DATETIME] NULL,
    [CustomerID] [VARCHAR](254) NULL,
    [DataA] [VARCHAR](50) NULL,
    [DataB] [VARCHAR](50) NULL,
    [DataC] [VARCHAR](50) NULL,
    [SnapDate] [DATETIME] NULL
)

對於TableB:

CREATE TABLE [Customer].[TableB]
(
    [TransactionID] [VARCHAR](254) NULL,
    [VisitID] [VARCHAR](254) NULL,
    [ArrivalDT] [DATETIME] NULL,
    [CustomerID] [VARCHAR](254) NULL,
    [DataA] [VARCHAR](50) NULL,
    [DataB] [VARCHAR](50) NULL,
    [DataC] [VARCHAR](50) NULL,
    [SnapDate] [DATETIME] NULL
)

我的存儲過程的第27行是:

INSERT INTO [Customer].[JTM_NY_SPARCS_VitalSigns_test] ([CustomerID],[VisitID], [TransactionID], [ArrivalDT], [DataA], [DataB], [DataC], [SnapDate]) 

數據結果示例

這是存儲過程的完整讀出:

USE [Database_3]

GO

/****** Object:  StoredProcedure [Customer].[InsertTo_TableA_test]    Script Date: 4/12/2019 11:49:17 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE PROCEDURE [Customer].[InsertTo_TableA_test]


/*
CREATED: 04/11/2019
*/


AS
BEGIN

INSERT INTO [Customer].[TableA_test] ([CustomerID], [VisitID], [TransactionId], [ArrivalDT], [DataA], [DataB], [DataC], [SnapDate]) 
        SELECT
            b.CustomerID,   
            b.VisitID,
            b.TransactionID,
            b.ArrivalDT,
            b.DataA,
            b.DataB,
            b.DataC,
            SnapDate = GETDATE()
        FROM 
            [Customer].[TableA_test] a
        LEFT JOIN 
            [Customer].[TableB] b ON a.VisitID = b.VisitID
                                  AND a.TransactionId = b.TransactionID
        WHERE 
            a.TransactionID IS NULL

END





GO

從存儲過程運行查詢時的結果示例:

100010 [VisitID]      
20000281542 [TransactionID]    
2014-07-09 15:44:42.000 [ArrivalDT] 
0032011 [CustomerID]     
147 [DataA]    
71 [DataB]  
69 [DataC]  
2019-04-12 11:54:23.753 [SnapDate]

根據我在評論中看到的內容,您說過您正在嘗試將TableA_test插入TableB。 如果真是這樣,那么您的查詢應該是:

INSERT INTO [Customer].[TableB] ([CustomerID],[VisitID],[TransactionId],[ArrivalDT],[DataA],[DataB],[DataC],[SnapDate]) 

SELECT
    a.CustomerID,   
    a.VisitID,
    a.TranactionID,
    a.ArrivalDT,
    a.DataA,
    a.DataB,
    a.DataC,
    SnapDate = GETDATE()

FROM [Customer].[TableA_test] a
LEFT JOIN [Customer].[TableB] b
    ON a.VisitID = b.VisitID
        AND a.TransactionId = b.TransactionID
WHERE b.TransactionID IS NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM