Похоже, это больше работа для представлений (индексированные представления, если вам нужен быстрый поиск по вычисляемому столбцу):
CREATE VIEW AnyView
WITH SCHEMABINDING
AS
SELECT a.rec_id, a.s_id, a.n_code, a.rec_id * c.nvalue AS foo
FROM AnyTable a
INNER JOIN C_Const c
ON c.code = a.n_code
Это имеет небольшое отличие от версии подзапроса в том, что он возвращает несколько записей вместо того, чтобы выдавать ошибку, если есть несколько результатов для объединения. Но это легко разрешается с помощью ограничения UNIQUE
на c_const.code
(я подозреваю, что это уже PRIMARY KEY
).
Это также намного проще для понимания, чем версия подзапроса.
Вы можете сделать это с помощью подзапроса и UDF, как показал marc_s, но это, вероятно, будет очень неэффективным по сравнению с простым JOIN
, поскольку скалярный UDF нужно будет вычислять построчно -строка.