错误:消息102,级别15,状态1,过程InsertCustomers,第30行'THROW'附近的语法不正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:消息102,级别15,状态1,过程InsertCustomers,第30行'THROW'附近的语法不正确相关的知识,希望对你有一定的参考价值。

我有一个名为Sales.Customers的表,其中包含以下列:custid, companyname, contactname, contacttitle, address, city, postalcode, country, phone, fax。我需要创建一个名为'Sales.InsertCustomers'的存储过程,将数据插入Customers表。存储过程必须满足以下要求:

  • 数据更改作为单个工作单元发生。
  • 提交成功的数据修改并返回值O.
  • 回滚不成功的数据修改。异常严重性级别设置为16,并返回值-1。
  • 存储过程使用内置标量函数来评估数据修改的当前条件。
  • 如果在执行存储过程期间发生运行时错误,则终止并回滚整个工作单元。

以下是代码:

CREATE PROCEDURE Sales.InsertCustomers
   @Companyname nvarchar(100),
   @ContactName nvarchar(100),
   @Contacttitle nvarchar(100),
   @Address nvarchar(100),
   @City nvarchar(80),
   @PostalCode nvarchar(20),
   @country nvarchar(50),
   @phone nvarchar(20),
   @fax nvarchar(20)

AS
BEGIN
  SET NOCOUNT ON 
       SET XACT_ABORT ON 

BEGIN TRY
   BEGIN TRANSACTION 
       INSERT INTO Sales.Customers(companyname, contactname, contacttitle, address, city, postalcode, country, phone, fax)

       VALUES(@Companyname, @ContactName, @Contacttitle, @Address, @City, @PostalCode, @country, @phone, @fax)

      COMMIT TRANSACTION
END TRY
 BEGIN CATCH
      IF XACT_STATE() <> 0 ROLLBACK TRANSACTION
      PRINT 'Unable to create a customer record.'
      THROW
      RETURN -1
 END CATCH
RETURN 0
END;

当我运行代码时,我收到此错误:

消息102,级别15,状态1,过程InsertCustomers,第30行'THROW'附近的语法不正确。

我怎样才能解决这个问题?

答案

请参阅this链接。

THROW语句之前的语句必须后跟分号(;)语句终止符。

所以你的PRINT声明应以分号结尾。

PRINT 'Unable to create a customer record.';

或者你可以做。

;THROW

以上是关于错误:消息102,级别15,状态1,过程InsertCustomers,第30行'THROW'附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

消息 102,级别 15,状态 1,过程 CaDataGroup_Insert,第 88 行 '=' 附近的语法不正确

消息 102,级别 15,状态 1,第 3 行“,”附近的语法不正确 [重复]

消息 102,级别 15,状态 1,第 1 行“日期”附近的语法不正确。在更新查询中[关闭]

消息 443,级别 16,状态 15,过程 myinsert,第 6 行 在函数内对带副作用的运算符 ‘INSERT‘ 的使用无效。

是否可以从子查询中添加 SQL 别名?

写代码遇到的灵异事件