CaptainChizni Ответов: 2

Как поместить 0 в таблицу result и распечатать сообщение в специальном столбце(хранимая процедура SQL)


DECLARE @check INT = CASE
	WHEN @@ROWCOUNT = 0
    THEN 
	select 0 as [result], 'Success' as [message]
	ELSE 
	select 1 as [result], 'Failed' as [message]
	END


Что я уже пробовал:

я пробовал если еще но получаю логическую ошибку

Вывод будет такой
| результат | | сообщение |
| 0 | | успех |
| 1 | | не удалось |

Santosh kumar Pithani

Переменная возвращает только единичные значения, а не табличные записи.Найди мое решение
выберите [], случай, когда [результат]=функции@@rowcount после "успеха" еще не конец как [сообщение]
from (values(0),(1)) AS tab([результат])

CHill60

В чем же ошибка?

2 Ответов

Рейтинг:
1

CHill60

Существует три способа возврата данных из хранимой процедуры - см. Возврат данных из хранимой процедуры - SQL Server | Microsoft Docs[^]
Но ваша проблема заключается в том, что вы пытаетесь присвоить переменной более одной вещи, вам нужно отделить ее. например, вот так

IF OBJECT_ID('CHtest', 'P') IS NOT NULL  
   DROP PROCEDURE CHtest;  
GO  

CREATE PROCEDURE CHtest(@p_Input char(1), @msg varchar(255) OUTPUT)
AS
BEGIN

	-- Whatever it is you are doing to get a value in @@ROWCOUNT goes here

	IF @@ROWCOUNT = 0 
	BEGIN
		SET @msg = 'Success'
		RETURN 0
	END
	ELSE
	BEGIN
		SET @msg = 'Failed'
		RETURN 1
	END 
END


Maciej Los

5ed!

Jörgen Andersson

Существует четыре способа возврата данных в вашу ссылку

CHill60

? Выходной параметр, результирующий набор и код возврата. Я вижу только 3.

Jörgen Andersson

Нужен кофе

CHill60

Лол! Я дважды протер свои очки, просто чтобы быть уверенным :смех:

Рейтинг:
1

Jörgen Andersson

Существует способ вернуть данные так, как вы структурировали их в вопросе.
Так что если я немного скорректирую процедуру озноба:

ALTER PROCEDURE [dbo].[Test]
	-- Add the parameters for the stored procedure here
AS
BEGIN
    -- Whatever it is you are doing to get a value in @@ROWCOUNT goes here
    IF @@ROWCOUNT = 0
    BEGIN
    SELECT 0 AS [result], 'Success' AS [message]
    RETURN 0
    END
	ELSE 
    BEGIN
	SELECT 1 AS [result], 'Failed' AS [message]
    RETURN 1
	END
END


CHill60

5 б