формула для вычисляемого столбца на основе столбца другой таблицы

В C ++ у struct s нет оператора сравнения, сгенерированного по умолчанию. Вы должны написать свой собственный:

bool operator==(const MyStruct1& lhs, const MyStruct1& rhs)
{
    return /* your comparison code goes here */
}
45
задан p.campbell 3 September 2010 в 02:56
поделиться

2 ответа

Вы можете создать для этого пользовательскую функцию:

CREATE FUNCTION dbo.GetValue(@ncode INT, @recid INT)
RETURNS INT
AS 
   SELECT @recid * nvalue 
   FROM c_const 
   WHERE code = @ncode

, а затем использовать ее для определения вычисляемого столбца:

ALTER TABLE dbo.YourTable
   ADD NewColumnName AS dbo.GetValue(ncodeValue, recIdValue)
72
ответ дан 26 November 2019 в 19:36
поделиться

Кажется, это больше подходит для представлений (индексированных представлений, если вам нужен быстрый поиск по вычисляемому столбцу):

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 нужно будет вычислять строку за строкой.

24
ответ дан 26 November 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: