Requête SQL avec champs de type NUMERIC

J'ai une table comme celle-ci

CREATE TABLE MyTable ( [MyTableID] [int] NOT NULL, [Description] [varchar](50) NOT NULL, CONSTRAINT [PK_AddressType] PRIMARY KEY CLUSTERED ( [MyTableID] ASC ) ) ON [PRIMARY] 

Quelqu'un peut-il expliquer pourquoi la requête suivante fonctionne même si j'inclus la valeur du champ entre guillemets simples?

 SELECT * FROM MyTable WHERE MyTableID = '1' 

Est-ce une fonctionnalité spécifique à SQL Server? C'est ANSI / SQL?

Ce que vous avez démontré est communément appelé conversion de données implicite – datatables sont automatiquement converties en type de données de la colonne en cours de comparaison. Parce qu'une string avec une valeur de "1" peut être convertie en un type de données numérique avec une valeur de 1, les choses fonctionnent très bien. Les conversions de type de données implicites peuvent se produire selon la list de priorité ici.

La conversion de données explicite est lorsque vous utilisez des fonctions telles que CAST ou CONVERT .

Ssortingng to numeric (et vice versa) est supporté sur toutes les bases de données que je connais – SQL Server, Oracle, MySQL, PostgreSQL … La fonction CAST est ANSI, IIRC. Les autres types de données ne sont pas aussi flexibles – dates et dates par exemple.

En plus de OMG Ponies répondre.

Les conversions de type de données implicites peuvent se produire selon la list de priorité ici.

Ils peuvent être source de problèmes de performances lorsque le type de données d'une constante ou d'un paramètre dans un prédicat a une priorité supérieure à celle de la colonne. Dans ce cas, les valeurs de la colonne devront subir une conversion implicite, ce qui signifie qu'un index ne peut pas être utilisé.