【问题标题】:Insert new data to a table with stored procedure使用存储过程向表中插入新数据
【发布时间】:2020-08-02 23:28:13
【问题描述】:

我试图让一个存储过程将数据插入到一个表中:

create procedure AddEmployee
(
    @FirstName nvarchar(20)
    , @LastName nvarchar(20)
    , @BirthDate datetime
    , @Country nvarchar(15)
    , @City nvarchar(15)
)
as
    insert into Employees
    values (@FirstName, @LastName, @BirthDate, @Country, @City)
go

但是当我运行它时,我收到错误消息:

消息 213,级别 16,状态 1,过程 AddEmployee,第 2 行 [批处理开始第 17 行]
列名或提供的值的数量与表定义不匹配。

我查看了这个问题,但没有解决我的问题: Create a stored procedure to insert new data into a table

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    使用插入时,总是包含列名:

    create procedure AddEmployee (
        @FirstName nvarchar(20) ,
        @LastName nvarchar(20) ,
        @BirthDate datetime,
        @Country nvarchar(15),
        @City nvarchar(15)
    ) as
    begin
        insert into Employees (FirstName, LastName, BirthDate, Country, City)
            values (@FirstName, @LastName, @BirthDate, @Country, @City);
    end;
    

    虽然 SQL 允许您省略列名,但您应该将它们包括在内作为最佳实践。这对于那些学习语言的人来说尤其重要,因此他们会学习更安全的做事方式。

    【讨论】:

    • 别忘了insert into之后的左括号..
    • @Jason 。 . .我不知道你的意思。唯一的括号围绕列列表和值列表。
    • 我的错...我正在阅读员工作为列名... :)
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多