Как мне вернуть скалярную переменную из оператора select

#sql

#sql

Вопрос:

Я изменяю таблицу, добавляя новый столбец, этот столбец должен иметь значение по умолчанию, взятое из одной записи в другой таблице

 ALTER TABLE Bonus_Profile 
ADD Orgunit varchar(50) NOT NULL
DEFAULT (select top 1 OrgUnit from OrgUnits where ReportTo is null)
  

Приведенное выше утверждение выдает Subqueries are not allowed in this context. Only scalar expressions are allowed. ошибку as и

Что следует использовать для получения скалярной переменной OrgUnit

Комментарии:

1. Какую СУБД вы используете?

2. Top без order by не является детерминированным. Если SQL Server, вы не можете использовать там подзапрос, но можете установить скалярный UDF по умолчанию.

Ответ №1:

Сначала создайте скалярную функцию без параметров

 CREATE FUNCTION ReturnOrgUnit ()

RETURNS VARCHAR(50)   

BEGIN

  Declare @orgUnit varchar(50)

  Select TOP 1 @orgUnit= OrgUnit from OrgUnits where ReportTo is null

  Return @orgUnit
END
  

Затем вы можете использовать вышеуказанный udf в операторе alter

 ALTER TABLE Bonus_Profile 
ADD Orgunit varchar(50) NOT NULL
DEFAULT (ReturnOrgUnit())