Sql 从数据表在表中插入新记录的存储过程

Sql 从数据表在表中插入新记录的存储过程,sql,database,stored-procedures,datatable,Sql,Database,Stored Procedures,Datatable,我在创建下面的存储过程时出错,该存储过程将从数据表中插入表中的新记录 CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert] @SecureList SecureList READONLY, @ListType varchar(20) AS BEGIN IF(@ListType='FETCHDETAILS') SELECT * FROM TBL_TICKETING_ALTERNATE_CREDIT_CARD_LI

我在创建下面的存储过程时出错,该存储过程将从数据表中插入表中的新记录

CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST
    ELSE
        BEGIN
            INSERT INTO TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST([CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark]) 
            SELECT [CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark] FROM @SecureList;
        END
    END
GO
CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST]
    ELSE
        BEGIN
            INSERT INTO [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST](CardRefID, [KEY], MIS_Field1, MIS_Field2, ValidatingCarrier
            , OtherCarriers, [Card Vendor], Card, Expiration, Precedence, AlertEmail, maxTktAmt, IRP_remark) 
            SELECT * FROM @SecureList;
        END
    END
GO
错误:

Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 12 [Batch Start Line 60]
Invalid column name 'CardRefID'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 12 [Batch Start Line 60]
Invalid column name 'MIS_Field1'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 12 [Batch Start Line 60]
Invalid column name 'MIS_Field2'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 12 [Batch Start Line 60]
Invalid column name 'ValidatingCarrier'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'OtherCarriers'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'Card Vendor'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'Card'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'Expiration'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'Precedence'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'AlertEmail'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'maxTktAmt'.
Msg 207, Level 16, State 1, Procedure SP_Cde_SecureList_Upsert, Line 13 [Batch Start Line 60]
Invalid column name 'IRP_remark'.

Completion time
这很奇怪,因为列名是正确的

下面是我试图从数据表中插入数据的SP和表的标题/列的屏幕截图

CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST
    ELSE
        BEGIN
            INSERT INTO TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST([CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark]) 
            SELECT [CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark] FROM @SecureList;
        END
    END
GO
CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST]
    ELSE
        BEGIN
            INSERT INTO [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST](CardRefID, [KEY], MIS_Field1, MIS_Field2, ValidatingCarrier
            , OtherCarriers, [Card Vendor], Card, Expiration, Precedence, AlertEmail, maxTktAmt, IRP_remark) 
            SELECT * FROM @SecureList;
        END
    END
GO
如果我从数据表中选择*

CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST
    ELSE
        BEGIN
            INSERT INTO TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST([CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark]) 
            SELECT [CardRefID], [KEY], [MIS_Field1], [MIS_Field2], [ValidatingCarrier]
            , [OtherCarriers], [Card Vendor], [Card], [Expiration], [Precedence], [AlertEmail], [maxTktAmt], [IRP_remark] FROM @SecureList;
        END
    END
GO
CREATE PROCEDURE [dbo].[SP_Cde_SecureList_Upsert]
    @SecureList SecureList READONLY,
    @ListType varchar(20)
AS
BEGIN
    IF(@ListType='FETCHDETAILS')
        SELECT * FROM [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST]
    ELSE
        BEGIN
            INSERT INTO [dbo].[TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST](CardRefID, [KEY], MIS_Field1, MIS_Field2, ValidatingCarrier
            , OtherCarriers, [Card Vendor], Card, Expiration, Precedence, AlertEmail, maxTktAmt, IRP_remark) 
            SELECT * FROM @SecureList;
        END
    END
GO
我得到一个错误,因为

Msg 120, Level 15, State 1, Procedure SP_Cde_SecureList_Upsert, Line 10 [Batch Start Line 60]
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.

这与C无关,因此您应该从问题中删除标记。您能提供错误消息吗?

您遇到了什么错误。这在C中是如何使用的?@MintMoney。错误信息似乎很清楚。一个或两个TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST或@SecureList没有这些列如果您看到我的屏幕截图最后一部分,TBL_TICKETING_ALTERNATE_CREDIT_CARD_LIST有所有这些列,数据表正在从C代码中传递这些值。@GordonLinoff-有输入吗?出现此错误是因为表的列数比insert语句的列数多或少,并且使用*从表中进行选择。虽然使用*没有错,但更好的做法是按名称指定列,以防止将来修改表时出错。