2010-03-18 11 views
5

Aquí hay una copia de mi base de datos.La columna calculada debería dar como resultado la cadena

Tanto col1 como col2 se declaran como int.

Mi ComputedColumn Actualmente añade las columnas 1 y 2, de la siguiente manera ...

col1 col2 ComputedColumn 
1  2  3 
4  1  5 

En lugar de esto, mi ComputedColumn debe unirse a las columnas 1 y 2 (includimg la '-' carácter en el medio) de la siguiente manera ...

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

Entonces, ¿cuál es la sintaxis correcta?

Respuesta

9

Probablemente esté definiendo su columna calculada como col1+col2. Pruebe CAST(col1 AS NVARCHAR(MAX))+'-'+CAST(col2 AS NVARCHAR(MAX)) en su lugar.

O si lo prefiere, puede reemplazar NVARCHAR(MAX) con NVARCHAR(10) o una longitud diferente de su elección.

+1

¡Creo que NVARCHAR (MAX) es exagerado !, ¡son INT, por lo que hay una longitud máxima y no pueden contener ningún carácter Unicode extraño! así que varchar (11) estaría bien. –

+0

@KM Buen punto, especialmente en 'VARCHAR' contra' NVARCHAR'. La longitud es una preocupación menor: siempre que la longitud total de la fila no exceda el tamaño de fila permitido (4K?), Creo que no habrá diferencia práctica entre usar MAX frente a los 11 que sugiere. – Dathan

+0

si se trata de una columna calculada que no está PERSISTED, posiblemente realizará este cálculo millones de veces, dependiendo de la cantidad de SELECT que haga en esta columna. Pensaría que hay algo de sobrecarga al hacer operaciones de cadena en columnas (MAX) vs (n). ¿Por qué arriesgarse, el int no puede ser más grande que varchar (11)? –

0

simple:

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

Tenga en cuenta que si cualquiera de los valores es null entonces el resultado de ComputedColumn también será null (usando la colación por defecto y los ajustes)

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

" + "es tanto la suma como el carácter de concatenación. Podría convertir explícitamente, pero en este caso, incluir el '-' en el medio debería causar una conversión implícita.

+2

creo que no. Todavía agrega las columnas – OrElse

+0

Ah, eso es gracioso, pero creo que sé por qué. SELECT 4 + 'a' + 6 devuelve un error de sintaxis "Error de sintaxis al convertir el valor varchar 'A' a una columna del tipo de datos int", por lo que debe estar haciendo la conversión implícita de forma incorrecta (convirtiendo '-' a entero (0), luego sumarlos todos juntos) – BradC

0

primero crear la tabla en modo de diseño

agregar 2 columna como col1 y col2

añadir otro computedcolumn columna y conjunto computarizada propiedad de la columna

enter image description here

También puede utilizar esa secuencia de comandos siguiente

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

)

Cuestiones relacionadas