Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用存储过程将查询结果插入表时出现问题_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 使用存储过程将查询结果插入表时出现问题

Sql 使用存储过程将查询结果插入表时出现问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图在一些表上做一些测试,但我似乎一直遇到错误 CREATE TABLE [Customer].[TableA_test] ( [TransactionID] [VARCHAR](254) NULL, [VisitID] [VARCHAR](254) NULL, [ArrivalDT] [DATETIME] NULL, [CustomerID] [VARCHAR](254) NULL, [DataA] [VARCHAR](50) NULL, [D

我试图在一些表上做一些测试,但我似乎一直遇到错误

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
)
我正在尝试运行以下存储过程:

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
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
)
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]
该过程旨在从查询中获取结果并将其插入到表中。表A的列和数据类型与表B完全相同。当我尝试执行存储过程(上面提供的代码)时,出现以下错误:

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
)
Msg 241,16级,状态1,程序插入到表格测试,第27行
从字符串转换日期和/或时间时,转换失败

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
)
所有“我的日期”列都设置为
datetime
数据类型:
ArrivalDT
SnapDate
。TableA_测试和TableB具有完全相同的列名和数据类型

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
)
有什么我遗漏的吗

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
)
以下是[客户].[表格测试]的表格信息:

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
)
表B:

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
)
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行是:

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
)
INSERT INTO [Customer].[JTM_NY_SPARCS_VitalSigns_test] ([CustomerID],[VisitID], [TransactionID], [ArrivalDT], [DataA], [DataB], [DataC], [SnapDate]) 

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
)
以下是存储过程的完整读取:

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
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
)
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]
从存储过程运行查询时的结果行示例:

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
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
)
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_测试插入TableB。如果是这种情况,那么您的查询应该是:

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
)
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

从我在您的评论中看到的情况来看,您说您正在尝试将TableA_测试插入TableB。如果是这种情况,那么您的查询应该是:

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
)
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


那句话是不是在做你想做的?如果表
TableB
中没有行连接到表
TableB
(与
TableA\u测试中的行匹配),则它正在将数据从表
[TableB]
插入表
TableA\u测试中。这只需插入一组
NULL
值(除了插入当前值
GETDATE()
SnapDate
之外)。@Larnu他将
[Customer].[TableB]
中的数据插入
TableA\u Test
中,请查看
选择中的别名。我的代码可能有问题。我正试图把我在TableA_测试中的一堆数据移到TableB中。我加入TableB是为了排除任何重复的行。他是@RyanWilson是的,但是他的
来自
[Customer].[TableA\u test]
[TableB]
上有一个
左连接,特别是在
上,a.TransactionId=b.TransactionId
(这很重要)。OP的
其中
b。TransactionID为NULL
,而as
NULL
永远不能等于
NULL
,那么将不会从
TableB
返回任何行。您的查询看起来正常。也许你有一个引发问题的触发因素。那句话是否符合你的意图?如果表
TableB
中没有行连接到表
TableB
(与
TableA\u测试中的行匹配),则它正在将数据从表
[TableB]
插入表
TableA\u测试中。这只需插入一组
NULL
值(除了插入当前值
GETDATE()
SnapDate
之外)。@Larnu他将
[Customer].[TableB]
中的数据插入
TableA\u Test
中,请查看
选择中的别名。我的代码可能有问题。我正试图把我在TableA_测试中的一堆数据移到TableB中。我加入TableB是为了排除任何重复的行。他是@RyanWilson是的,但是他的
来自
[Customer].[TableA\u test]
[TableB]
上有一个
左连接,特别是在
上,a.TransactionId=b.TransactionId
(这很重要)。OP的
其中
b。TransactionID为NULL
,而as
NULL
永远不能等于
NULL
,那么将不会从
TableB
返回任何行。您的查询看起来正常。可能是您的触发器导致了问题。
SnapDate
将是上下文中的别名。尝试
选择SnapDate=GETDATE()例如。感谢您的澄清。在这种情况下,我的答案是不适用的。我仍然没有发现这个查询有任何明显的问题。你知道@Larnu吗?我想我们缺少了关键信息,比如DDL、Sabhari。@Larnu:我在帖子中添加了完整存储过程中的脚本。:)
SnapDate
将是上下文中的别名。尝试
选择SnapDate=GETDATE()例如。感谢您的澄清。在这种情况下,我的答案是不适用的。我仍然没有发现这个查询有任何明显的问题。你知道@Larnu吗?我想我们缺少了关键信息,比如DDL、Sabhari。@Larnu:我在帖子中添加了完整存储过程中的脚本。:)