2009-10-26 5 views
2

je le tableau suivant dans SQL Server 2000:T-SQL Paramètres

TABLE_NAME   |  COLUMN_NAME  |  TYPE_NAME  | PRECISION | LENGTH | SCALE  | 
test      TestID     int     10     4   0 
test      TestDecimal   decimal    18     20   2 
test      TestFloat    float    15     8   NULL 
test      TestMoney    money    19     21   4 

Ma question est, si je voulais créer une procédure stockée qui prend 4 paramètres en fonction de mes champs de table, comment dois-je faire ce. J'ai cette solution:

CREATE PROCEDURE TestProc (@TestID int, @TestDecimal decimal, @TestFloat float, @TestMoney money) 
AS 
..... 
..... 
..... 
GO 

Cela fonctionne, sauf que je pense que @TestDecimal perd sa partie décimale, convertissant ainsi en un nombre entier. Dois-je mettre @TestDecimal decimal (Precision, Scale) au lieu de simplement décimal? et si oui, existe-t-il d'autres types de données numériques dont j'ai besoin pour spécifier ce type de codage de paramètre?

+3

Vous gagnez le prix pour la plus belle définition de table que j'ai vu jusqu'ici (et j'en ai vu quelques-uns ici). –

+0

LOL! Je vous remercie. – Icemanind

Répondre

5

Oui, vous devez spécifques (18,2) pour décimal/numérique

de même pour flotter/réel, (n) varchar (n) char, (var) binaire, datetime2 (manqué tout ?)

Une précision, une échelle ou une longueur différente est en effet un type de données différent et une conversion se produira.

Example question pourquoi differenmt longueurs varchar font différents types de données

+0

Vous auriez probablement seulement à spécifier l'échelle et la précision si elles sont autres que la valeur par défaut. (Je ne l'ai jamais spécifié pour aucun de mes flotteurs et réels.) –

+0

@Philip: Je spécifierais toujours à l'exception de float/real (que je n'utilise pas vraiment). Par exemple je ne compterais pas sur varchar length = 30 dans un CAST: Je définirais explicitement, en particulier décimal en raison de la façon dont * et/sont gérés (http://stackoverflow.com/questions/423925/) – gbn

+0

Voir aussi http : //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

0

Votre type de paramètre doit correspondre au type de colonne de base de données. Un type de base de données est défini non seulement par son type de base, mais aussi par sa longueur réelle et sa précision, lorsqu'il s'applique. TestDecimal id actuellement DECIMAL(18,2) dans votre exemple.