2010-03-18 10 views
5

Вот небольшая привязка к моей базе данных.Вычисленный столбец должен содержать строку

Оба col1 и col2 объявляются как int.

Мои ComputedColumn в настоящее время добавляет в колонках 1 и 2, как следует ...

col1 col2 ComputedColumn 
1  2  3 
4  1  5 

Вместо этого, мой ComputedColumn должен присоединиться колонки 1 и 2 (includimg в '-' характер в средний) следующим образом:

col1 col2 ComputedColumn 
1  2  1-2 
4  1  4-1 

Итак, что такое правильный синтаксис?

ответ

9

Возможно, вы определили свой вычисленный столбец как col1+col2. Вместо этого попробуйте CAST(col1 AS NVARCHAR(MAX))+'-'+CAST(col2 AS NVARCHAR(MAX)).

Или, если хотите, вы можете заменить NVARCHAR(MAX) на NVARCHAR(10) или на другую длину по вашему выбору.

+1

Я думаю, что NVARCHAR (MAX) является чрезмерным !, они INTs, поэтому максимальная длина и не может содержать каких-либо странных символов Юникода !!! поэтому varchar (11) будет в порядке. –

+0

@KM Хорошая точка, особенно на 'VARCHAR' против' NVARCHAR'. Длина представляет меньшую озабоченность - пока общая длина строки не превышает допустимый размер строки (4K?), Я считаю, что практического различия между использованием MAX и 11, которые вы предлагаете, не будет. – Dathan

+0

, если это вычисленный столбец, который не является PERSISTED, вы можете сделать это вычисление миллионы раз, в зависимости от того, сколько SELECTs вы делаете в этом столбце. Я думаю, что при выполнении строковых операций над столбцами (MAX) vs (n) возникают некоторые накладные расходы. Зачем рисковать, int не может быть больше, чем varchar (11). –

0

прост:

SELECT ComputedColumn = convert(varchar, col1) + '-' + convert(varchar, col2) 
    FROM Table 
2
create table TableName 
(
    col1 int, 
    col2 int, 
    ComputedColumn as Convert(varchar, col1) + '-' + Convert(varchar, col2) 
) 

Имейте в виду, что если либо значение null то результат ComputedColumn также будет null (используя параметры сортировки по умолчанию и настройки)

0
SELECT col1, col2, (col1 + '-' + col2) as ComputedColumn 

" + "- это как дополнение, так и символ конкатенации. Вы можете явно преобразовать, но в этом случае, в том числе «-» в середине, следует вызвать неявное преобразование.

+2

Я думаю, что нет. Он по-прежнему добавляет колонки – OrElse

+0

Ах, это смешно, но я думаю, что знаю почему. SELECT 4 + 'a' + 6 возвращает синтаксическую ошибку «Ошибка синтаксиса, преобразующая значение varchar« A »в столбец типа данных int», поэтому он должен делать неявное преобразование неправильным способом (его преобразование «-» в integer (0), затем добавив их вместе) – BradC

0

сначала создать таблицу в режиме конструктора

добавить 2 колонки, как col1 и col2

добавить еще один столбец computedcolumn и набор вычислен свойство столбца

enter image description here

Также вы можете использовать, что следующий сценарий

CREATE TABLE [dbo].[tbl](
[col1] [varchar](50) NOT NULL, 
[col2] [varchar](50) NOT NULL, 
[ComputedColumn] AS ((CONVERT([varchar],[col1],(0))+'-')+CONVERT([varchar],[col2],(0))) 

)

Смежные вопросы