tipos example declarar datos data create sql-server sqldatatypes

sql-server - example - tipos de datos en sql server 2016



en el servidor SQL, ¿cuál es la diferencia entre user_type_id y system_type_id en sys.types? (2)

De la respuesta de Heinzi (5 de mayo de 2014):

sys.columns.system_type_id = sys.types.user_type_id

Para un tipo incorporado, devuelve el tipo incorporado.

Para un tipo definido por el usuario, devuelve el tipo base incorporado. Esto podría tener sentido, por ejemplo, si desea obtener todas las columnas varchar, incluidas todas las columnas definidas por el usuario basadas en varchar.

Me gustaría agregar que esta (segunda) solución no será una solución completa si desea enumerar todas las columnas y sus tipos de datos.

Desde SQL Server 2008, los datos espaciales y jerárquicos se han introducido como tipos de datos definidos por el usuario integrados (aparentemente). Estos nunca han sido vinculados a ningún tipo de base. Esto significa que a pesar de que tienen un system_type_id (a saber, 240), este id no corresponde a ningún user_type_id.

En otras palabras, un intento de unir una columna system_type_id con una columna user_type_id eliminará todos los registros con tipos de datos espaciales o jerárquicos de los resultados de la consulta.

Si solo está interesado en los tipos base incorporados, pero también desea ver los resultados de las columnas que contienen datos espaciales y jerárquicos, puede usar la siguiente combinación modificada:

select t.name, ... from sys.columns c join sys.types t on c.system_type_id = t.user_type_id or (c.system_type_id = 240 and c.user_type_id = t.user_type_id)

Esto generará resultados para todas las columnas, incluidas aquellas con datos jerárquicos y espaciales.

¿Cuál es la diferencia entre user_type_id y system_type_id en la vista de sys.types en el servidor SQL?

Quiero unir internamente a sys.columns con sys.types para obtener los tipos de datos de las columnas en una tabla de usuarios, pero estas dos vistas tienen dos campos user_type_id y system_type_id, ¿cuál debería usarse?


Casi nunca desea unirse a sys.columns.system_type_id = sys.types.system_type_id . Esto conducirá a registros duplicados en el caso de tipos definidos por el usuario.

Hay dos JOINs que tienen sentido. Ambos funcionan de manera equivalente para los tipos incorporados.

  1. sys.columns.user_type_id = sys.types.user_type_id

    Para un tipo incorporado, devuelve el tipo incorporado.

    Para un tipo definido por el usuario, devuelve el tipo definido por el usuario.

  2. sys.columns.system_type_id = sys.types.user_type_id

    Para un tipo incorporado, devuelve el tipo incorporado.

    Para un tipo definido por el usuario, devuelve el tipo base incorporado . Esto podría tener sentido, por ejemplo, si desea obtener todas las columnas varchar , incluidas todas las columnas definidas por el usuario basadas en varchar.