Vraag geheel getal Max-waardeconstanten in SQL Server T-SQL?


Zijn er constanten in T-SQL zoals in sommige andere talen die de max- en min-waarden bereiken van gegevenstypen zoals int?

Ik heb een codetabel waarin elke rij een kolom van het bovenste en onderste bereik heeft en ik een invoer nodig heb die een bereik vertegenwoordigt waarbij het bovenste bereik de maximale waarde is die een int kan behouden (een soort van hackish oneindig). Ik zou het liever niet coderen en in plaats daarvan iets als gebruiken SET UpperRange = int.Max


39
2018-04-29 20:45


oorsprong


antwoorden:


Er zijn twee opties:

  • door de gebruiker gedefinieerde scalaire functie
  • eigenschappen tabel

In Oracle kunt u dit doen binnen Pakketten - de dichtstbijzijnde SQL Server is Assemblies ...


11
2018-04-29 20:52



Ik denk niet dat er gedefinieerde constanten zijn, maar je zou ze zelf kunnen definiëren door de waarden in een tabel op te slaan of door een scalar-gewaardeerde functie te gebruiken.

Tafel 

Stel een tabel in met drie kolommen: TypeName, Max en Min. Op die manier hoef je ze maar één keer te vullen.

Scalaire gewaardeerde functie

Als alternatief kunt u bijvoorbeeld Scalar-gewaardeerde functies GetMaxInt () gebruiken (zie dit StackOverflow-antwoord voor een echt voorbeeld.

U kunt hier alle max / min-waarden vinden: http://msdn.microsoft.com/en-us/library/ms187752.aspx


7
2018-04-29 20:49



Vermijd scalaire functies zoals de pest:
Scalar UDF-prestatieprobleem

Dat gezegd hebbende, zou ik de tabel met 3 kolommen niet gebruiken die een andere persoon heeft voorgesteld.
Dit zou impliciete conversies veroorzaken overal waar je het zou gebruiken.
U moet ook meerdere keren meedoen aan de tabel als u deze voor meer dan één type wilt gebruiken.

In plaats daarvan heeft u een kolom voor elke Min en Max van elk gegevenstype (gedefinieerd met behulp van het eigen gegevenstype) en roept u die direct op om te vergelijken met.

Voorbeeld:

SELECT *
  FROM SomeTable as ST
  CROSS JOIN TypeRange as TR
  WHERE ST.MyNumber BETWEEN TR.IntMin  AND TR.IntMax

3
2018-02-14 00:46