#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())