sql-server - Throw 附近的语法不正确 - 我错过了什么?

标签 sql-server t-sql

我正在尝试执行像这样的 THROW 语句(value12345 是一些随机值):

use testdb;
go

begin try
if('value' in (select distinct shelf from itemloc))
update itemloc
set shelf = 'value'
where item = '12345';
end try
begin catch
;Throw 160073, 'Failed to update shelf value', 1;
end catch;

使用this reference

我查看了this question我在 THROW 之前有 ; 。我还根据引用检查语法,但不明白为什么执行此返回

Msg 102, Level 15, State 1, Line 11 Incorrect syntax near 'Throw'.

最佳答案

你在一个CATCH中,你不能在这里选择你的错误,你只能使用THROW;。另外,您不需要以分号开始您的语句,您已经在最后一个语句的末尾添加了一个分号。它是一个终止符(它位于行的末尾),而不是位于开头和结尾。

如果您想使用自定义错误,请使用RAISERROR。例如:

USE TESTDB;
GO

BEGIN TRY    
    IF('value' IN (SELECT DISTINCT shelf FROM itemloc))
        UPDATE itemloc
        SET shelf = 'value'
        WHERE item = '12345';
END TRY
BEGIN CATCH
    DECLARE @ERROR VARCHAR(MAX);
    SET @ERROR = 'Failed to update shelf value';
    RAISERROR(@ERROR, 11, 160073); 
END CATCH

关于sql-server - Throw 附近的语法不正确 - 我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828889/

相关文章:

c# - 无法绑定(bind)多部分标识符 "sxxx@yahoo.com"

sql - 使用 SQL Like 对一系列字符进行模式匹配

sql-server - Weblogic 12C + SQL Server 2012

t-sql - SQL 别名为 Group By 提供 "invalide column name"

sql - MSSQL - 授予除一个表之外的所有表的选择权限

sql - 如何找到分组的 SQL 中位数

sql - 如何在 SQL Server 2008 中的存储过程中编写游标

sql-server - 合并名字和姓氏并更新为每行的全名列

sql - 如何删除 MS SQL 数据库中的部分重复项?

sql-server - 在 SQL 中使用逻辑