如何编写存储过程查询

时间:2018-08-18 07:19:28

标签: sql-server stored-procedures

我正在尝试创建一个存储过程,以将新记录插入INVOICE表中

详细信息是:

  • 发票(INV_NUMBER [PK,int],CUS_CODE [FK,int],INV_DATE [Date / time])
  • 客户(CUS_CODE [PK],LNAME,FNAME,INITIAL,AREACODE,PHONE,BALANCE)

当有FK和int列时,如何编写存储过程查询以在INVOICE中插入新行?

这是我所做的,但不正确:

CREATE PROC spNewCustomer_INVOICE
AS
BEGIN
    DECLARE @INV_NUMBER VARCHAR(50);
    DECLARE @CUS_CODE VARCHAR(50);
    DECLARE @INV_DATE VARCHAR(50);
AS 
    INSERT INTO INVOICE
    VALUES (@INV_NUMBER, @CUS_CODE, @INV_DATE)

调用:

EXEC spNewCustomer_INVOICE '2018', '20018', '2018-08-17'

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

首先-您需要为存储过程创建参数-而不是内部变量。

第二,我会强烈建议为每个参数使用最合适的数据类型-而不仅仅是为所有参数使用VARCHAR(50)。您表格的列的类型为INTDATETIME-使用这些类型作为参数!

第三,我建议始终明确指定要插入目标表的列。

总而言之,请尝试以下代码:

CREATE PROCEDURE NewCustomerInvoice
    @INV_NUMBER INT,
    @CUS_CODE INT,
    @INV_DATE DATETIME
AS
BEGIN
    INSERT INTO INVOICE (INV_NUMBER, CUS_CODE, INV_DATE)
    VALUES (@INV_NUMBER, @CUS_CODE, @INV_DATE);
END;

然后使用以下命令调用此过程:

EXEC NewCustomerInvoice 
         @INV_NUMBER = 2018, 
         @CUS_CODE = 20018, 
         @INV_DATE = '20180817';