基于查询成功的SQL Server存储过程返回值

基于查询成功的SQL Server存储过程返回值,sql,tsql,stored-procedures,sql-server-2014,Sql,Tsql,Stored Procedures,Sql Server 2014,在SQL Server 2014中,我创建了一个简单的存储过程,它执行大容量插入;我所要做的是捕获大容量插入是否成功或失败,并分别返回0或1 存储过程代码为: ALTER PROCEDURE [dbo].[BulkInsert] @file_name nvarchar(100) AS BEGIN SET NOCOUNT ON; DECLARE @bulk_insert NVARCHAR(2000); SET @bulk_insert = N'BU

在SQL Server 2014中,我创建了一个简单的存储过程,它执行大容量插入;我所要做的是捕获大容量插入是否成功或失败,并分别返回0或1

存储过程代码为:

ALTER PROCEDURE [dbo].[BulkInsert] 
    @file_name nvarchar(100)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @bulk_insert NVARCHAR(2000);

    SET @bulk_insert  = 
    N'BULK INSERT log_door_access FROM ''' +
    @file_name +
    N''' WITH (FIELDTERMINATOR = ''\t'', ROWTERMINATOR = ''0x0A'');';

    EXEC sp_executesql @bulk_insert;
END
我试图捕获执行结果,如果一切正常,则返回1,如果发生错误,则返回0

ALTER PROCEDURE [dbo].[BulkInsert] 
@file_name nvarchar(100)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @bulk_insert NVARCHAR(2000);

    SET @bulk_insert  = 
    N'BULK INSERT log_door_access FROM ''' +
    @file_name +
    N''' WITH (FIELDTERMINATOR = ''\t'', ROWTERMINATOR = ''0x0A'');';

    declare @r int
    EXEC @r = sp_executesql @bulk_insert;

    select @r
END

应该这样做,或者为sp_executesql使用输出参数,或者使用try-catch块。

这可以通过使用“为Transact-SQL实现错误处理,类似于Microsoft Visual C中的异常处理”

try…catch
)[-”为Transact-SQL执行错误处理,类似于Microsoft Visual C#…“@Serg中的异常处理。我刚刚尝试了这个方法,效果很好。如果您将其作为答案发布,我将接受它。这是一个简单的答案,我确信应该将其格式化为答案,但我会这样做。出于某种原因,此方法始终返回0.App显然,大容量插入不会返回任何内容,因此没有任何内容可分配给变量。