Перепишите этот INSERT * без * подзапроса, пожалуйста?

Как бы этот оператор INSERT был переписан без подзапроса, поэтому он больше не приводит к ошибке «Подзапросы в этом контексте недопустимы. Разрешены только скалярные выражения»?

INSERT INTO FUNCTIONAL_AREA ( FUNCTIONAL_AREA_UUID ,FUNCTIONAL_CATEGORY_UUID ,CREATE_DATETIME ,CREATE_USER ,LUPDATE_DATETIME ,LUPDATE_USER ,DESCRIPTION ,ITEM_CODE ,IS_ACTIVE ) VALUES ( NEWID() ,(select functional_category_uuid from functional_category where description = 'ADLs') ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,'Bathing - Ability' ,1081 ,1) 

Спасибо!

 INSERT INTO FUNCTIONAL_AREA ( FUNCTIONAL_AREA_UUID ,FUNCTIONAL_CATEGORY_UUID ,CREATE_DATETIME ,CREATE_USER ,LUPDATE_DATETIME ,LUPDATE_USER ,DESCRIPTION ,ITEM_CODE ,IS_ACTIVE ) select NEWID() ,functional_category_uuid ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,'Bathing - Ability' ,1081 ,1 from functional_category where description = 'ADLs' 

EDIT Добавление:

Если вы хотите, чтобы только одна строка вставлена, и вы заботитесь о том, какая строка выбрана из функции function_category, то либо сузите предложение where, так что возвращается только одна строка, либо используйте порядок и вершину 1:

 INSERT INTO FUNCTIONAL_AREA ( FUNCTIONAL_AREA_UUID ,FUNCTIONAL_CATEGORY_UUID ,CREATE_DATETIME ,CREATE_USER ,LUPDATE_DATETIME ,LUPDATE_USER ,DESCRIPTION ,ITEM_CODE ,IS_ACTIVE ) select top 1 NEWID() ,functional_category_uuid ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,GETDATE() ,'11111111-1111-1111-1111-111111111111' ,'Bathing - Ability' ,1081 ,1 from functional_category where description = 'ADLs' order by <criteria that causes the correct row to be first> 

Причина, по которой вы получаете эту ошибку, состоит в том, что предложение VALUES ограничивает вас вставкой одной строки. Когда у вас есть подзапрос как один из столбцов, это может привести к нескольким значениям.

Вы можете либо сделать «вставку», как показано другими, либо записать значение переменной, и использовать предложение TOP 1, если подзапрос возвращает более одной строки.

Небольшая коррекция, если вы хотите вставить ровно одну строку во всех случаях:

 INSERT INTO FUNCTIONAL_AREA ( FUNCTIONAL_AREA_UUID, FUNCTIONAL_CATEGORY_UUID, CREATE_DATETIME, CREATE_USER, LUPDATE_DATETIME, LUPDATE_USER, DESCRIPTION, ITEM_CODE, IS_ACTIVE) SELECT TOP (1) NEWID(), functional_category_uuid, GETDATE(), '11111111-1111-1111-1111-111111111111', GETDATE(), '11111111-1111-1111-1111-111111111111', 'Bathing - Ability', 1081, 1 FROM functional_category WHERE description = 'ADLs' 

или

 DECLARE @category_uuid uniqueidentifier SELECT @category_uuid = functional_category_uuid FROM functional_category WHERE description = 'ADLs' INSERT INTO FUNCTIONAL_AREA ( FUNCTIONAL_AREA_UUID, FUNCTIONAL_CATEGORY_UUID, CREATE_DATETIME, CREATE_USER, LUPDATE_DATETIME, LUPDATE_USER, DESCRIPTION, ITEM_CODE, IS_ACTIVE) VALUES( NEWID(), @category_uuid, GETDATE(), '11111111-1111-1111-1111-111111111111', GETDATE(), '11111111-1111-1111-1111-111111111111', 'Bathing - Ability', 1081, 1) 
Давайте будем гением компьютера.