T-SQL, Select @variable в подзапросе вызывает синтаксическую ошибку

Я использую суб-запрос для получения результатов (несколько возвращенных записей), и я хочу, чтобы эти результаты были возвращены в одну запись.

Когда я запускаю подзапрос самостоятельно, он работает, но как только я использую его как дополнительный запрос, он больше не работает из-за синтаксической ошибки.

Следующий код вызывает синтаксическую ошибку

(Неправильный синтаксис около '='.)

declare @test varchar(1000) set @test = '' SELECT description, (SELECT @test = @test + FirstName FROM EMP_tblEmployee )select @test FROM EMP_tblCrew 

Таким образом, суб-запрос

 (SELECT @test = @test + FirstName FROM EMP_tblEmployee )select @test 

возвращает "charliejohnjacob"

Основной запрос

 SELECT description FROM EMP_tblCrew 

возвращает "janitor"

Поэтому я хочу сказать

дворники | charliejohnjacob

2 поля, 1 запись.

Ваш запрос не является синтаксически правильным, а анализатор T-SQL имеет неприятную привычку не сообщать об ошибке довольно точно в разы. Это немного удар в темноте, но попробуйте:

 SELECT description, (SELECT FirstName + ' ' FROM EMP_tblEmployee FOR XML PATH('')) AS [Name Concat Result] FROM EMP_tblCrew 

Это, по крайней мере, установит хотя бы одну вещь, хотя я не уверен, как SQL-сервер чувствует себя в этом вопросе. Вы также рискуете переполнять varchar (1000), если ваша таблица имеет значительный размер. Даже varchar 8000 не очень подходит для такого рода запросов.

Попробуйте найти google для «SQL Concatenate rows in string». Для этого есть ряд полезных решений.

Похоже, вам также нужно присоединиться к сотруднику на столе экипажа, чтобы вы не получили какой-то декартивный продукт (обычно это не то, что нужно).

Вероятно, самым простым путем является использование рекурсивного CTE (общее табличное выражение). Подробный пример этого: https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

Обратите внимание, что в основном это требует, чтобы у вас был sql 2008.

Другим путем было бы создание пользовательской функции, которая возвращала бы конкатенированные значения из таблицы EMP_tblEmployee. Вы можете сделать это в 2005 или 2008 году.

Interesting Posts

SSDT Refactor Rename игнорируется при генерации сценария Schema Comparison

Символ SQL Server заменяется на большой набор данных

Внешнее соединение, исключающее строки

Рекурсивный запрос SQL, который получает всех предков элемента

Вызов хранимых процедур SQL Server из Delphi с аргументами?

C # DataRow.ToString () автоматически форматирует строку, когда она не должна

Операнд типа clash: int несовместим с uniqueidentifier. Как сделать уникальный идентификатор OUTPUT

Сценарий проверки подлинности скрипта SSIS версии 15.0?

dacpac – проблема с опорным путем сборки сборки CLR

Как обеспечить «уникальность» с булевым столбцом (вроде как кнопки «радио»)?

Лучший подход к истории?

Таблицы триггеров SQL Server с внешними ключами

Производительность SQL Server Views

Как я могу суммировать значения в день, а затем строить их в календаре с даты начала до последней даты

Есть ли способ подключиться к MS SQL Server 2008 с помощью Management Studio 2005?

Давайте будем гением компьютера.