Member 14479161 Ответов: 4

Что не так с этим SQL кодом и как решить эту проблему


alter proc SP_GetEmployeeByGender
@Gender varchar(50),
@EmployeeName varchar(100) output
as
begin
select @EmployeeName = 
    select Name ,GenderValue
	from PersonTable 
	join PersonGender
	on PersonTable.Gender = PersonGender.ID
	where GenderValue = @Gender
end


когда я выполняю этот код он выдает мне ошибку на подчеркнутом слове select мне нужно знать как решить эту проблему

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

<pre lang="SQL">
alter proc SP_GetEmployeeByGender
@Gender varchar(50),
@EmployeeName varchar(100) output
as
begin
select @EmployeeName = 
        'select Name ,GenderValue
	from PersonTable 
	join PersonGender
	on PersonTable.Gender = PersonGender.ID
	where GenderValue = @Gender'
end

то что я пробовал я добавил одиночные qoutes как вы можете видеть в коде но результат был тот же самый слова между qutes он считал sring

Maciej Los

Что такое сообщение об ошибке?

Member 14479161

ошибка массажа это так

Msg 156, Level 15, State 1, Procedure SP_GetEmployeeByGender, Line 7 [Batch Start Line 7]
Incorrect syntax near the keyword 'select'.<pre>

4 Ответов

Рейтинг:
36

Maciej Los

Если вы хотите вернуть результирующий набор, измените свой SP соответствующим образом:

alter proc usp_GetEmployeeByGender
@Gender varchar(50)
AS
BEGIN

    SET NOCOUNT OFF;

    SELECT [Name] ,GenderValue
    FROM PersonTable AS pt
	    join PersonGender AS pg ON pt.Gender = pg.ID
    WHERE pg.GenderValue = @Gender

END


Member 14479161

Привет я хочу присвоить результирующему набору значение Возможно ли это

Maciej Los

Ну, пожалуйста, прочтите это: Возврат данных из хранимой процедуры - SQL Server | Microsoft Docs[^]

Рейтинг:
20

MadMyche

У вас есть 2 ошибки в вашем коде:
1. При присвоении значения из Select заявление о том, что выбор должен скобку.
2. Ваш оператор SELECT возвращает 2 значения (имя и пол) для этого назначения

Попробуйте что-нибудь вроде этого

SELECT @EmployeeName = (
	SELECT [Name]
	FROM   PersonTable
	JOIN   PersonGender on PersonTable.Gender = PersonGender.ID
	WHERE  GenderValue = @Gender
)


Рейтинг:
1

OriginalGriff

Попробуй:

SET @EmployeeName = 
    select Name ,GenderValue
	from PersonTable 
	join PersonGender
	on PersonTable.Gender = PersonGender.ID
	where GenderValue = @Gender


Member 14479161

привет
о. получил эту ошибку

Msg 156, Level 15, State 1, Procedure SP_GetEmployeeByGender, Line 7 [Batch Start Line 7]
Incorrect syntax near the keyword 'select'.<pre>

Maciej Los

Кажется, ОП уже пробовал это сделать... Пожалуйста, прочтите вопрос еще раз.
Я предполагаю, что оператор select возвращает набор записей вместо одной записи.

Member 14479161

@Maciej Los как я могу решить эту проблему по вашему мнению

Рейтинг:
0

Member 11511491

Похоже, что в вашем сценарии есть 2 проблемы

1. вы не можете назначить 2 значения столбцов для одной переменной.
2. Есть еще "выберите пункт" срок в скрипте

см. ниже примерный пример. Надеюсь, это поможет

declare @name varchar(255)

select @name = name from[dbo].[Employees] where Id =1

select @name