web-dev-qa-db-fra.com

SQL Server vérifie le type d'expression de données résultant

Normalement, je mettrais le type de données dans une table temporaire et inspecter le type de colonne de table, par exemple.

select 1.0 N into tbl

sp_help tbl

La colonne N révèle alors le type de données de l'expression 1.0. (Ceci n'est qu'un exemple simple)

Il existe une fonction SQL pour inspecter directement le type de données d'une expression, mais le nom m'échappe en ce moment.

Quel est le nom de cette fonction?

42
RichardTheKiwi

SQL_VARIANT_PROPERTY est proche

DECLARE @what sql_variant
DECLARE @foo decimal(19,3) = 1, @bar decimal(11,7) = 2

SELECT @what = @foo / @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

SELECT @what = @foo + @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')


SELECT @what = @foo * @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

Ou table temporaire/SELECT..INTO .. ​​comme une extension de ce que vous avez déjà fait

Edit: réponse de Remus?

66
gbn

Tout ce que je peux penser, ce sont les fonctions ISNUMERIC et ISDATE .

Ceux-ci renverront un 1/0 lorsqu'ils passeront une expression. Je ne peux penser à rien qui retournera le type si on lui donne une expression malheureusement.

MISE À JOUR:

Essayez SQL_VARIANT_PROPERTY ! Je pense que c'est ce que vous recherchez. Difficile à retrouver ...

5
Abe Miessler

Je n'ai jamais vu une telle fonction.

De l'article MSDN sur expressions T-SQL :

Pour une expression simple composée d'une seule fonction constante, variable, scalaire ou nom de colonne: le type de données, le classement, la précision, l'échelle et la valeur de l'expression sont le type de données, le classement, la précision, l'échelle et la valeur du élément référencé.

Lorsque deux expressions sont combinées à l'aide d'opérateurs de comparaison ou logiques, le type de données résultant est booléen et la valeur est l'une des suivantes: TRUE, FALSE ou UNKNOWN. Pour plus d'informations sur les types de données booléens, consultez Opérateurs de comparaison (Transact-SQL).

Lorsque deux expressions sont combinées à l'aide d'opérateurs arithmétiques, au niveau du bit ou de chaîne, l'opérateur détermine le type de données résultant.

Les expressions complexes composées de nombreux symboles et opérateurs sont évaluées en un résultat à valeur unique. Le type de données, le classement, la précision et la valeur de l'expression résultante sont déterminés en combinant les expressions de composant, deux à la fois, jusqu'à ce qu'un résultat final soit atteint. La séquence dans laquelle les expressions sont combinées est définie par la priorité des opérateurs dans l'expression.

2
Joe Stefanelli