Существует ли метод для программно (в T-SQL) получение максимума (и минимум) значение типа данных? То, что это действовало бы как плавание. MaxValue в C#.
Я хотел бы использовать его в некотором выборе, когда параметр не равняется никаким фактическим значениям в базе данных, таким образом, я использовал бы что-то как
declare @min float
declare @max float
--fill @min and @max, can be null if undefined
select * from foo
where bar between isnull(@min,0 ) and isnull(@max,max(float)/*magic*/)
Хотя, похоже, нет никакого встроенного способа получить минимальное или максимальное значения, есть решение, которое кто-то собрал :
CREATE TABLE datatype_extrema
(min_bit bit NOT NULL DEFAULT (0) CHECK (min_Bit=0)
,max_bit AS CAST(0x1 AS bit)
,min_tinyint AS CAST(0x00 AS tinyint)
,max_tinyint AS CAST(0xFF AS tinyint)
,min_smallint AS CAST(0x8000 AS smallint)
,max_smallint AS CAST(0x7FFF AS smallint)
,min_int AS CAST(0x80000000 AS int)
,max_int AS CAST(0x7FFFFFFF AS int)
,min_bigint AS CAST(0x8000000000000000 AS bigint)
,max_bigint AS CAST(0x7FFFFFFFFFFFFFFF AS bigint)
,min_smalldatetime AS CAST('19000101 00:00' AS smalldatetime)
,max_smalldatetime AS CAST('20790606 23:59' AS smalldatetime)
,min_datetime AS CAST('17530101 00:00:00.000' AS datetime)
,max_datetime AS CAST('99991231 23:59:59.997' AS datetime)
)
INSERT INTO datatype_extrema DEFAULT VALUES
GO
CREATE TRIGGER nochange_datatype_extrema
ON datatype_extrema INSTEAD OF INSERT, UPDATE, DELETE
AS BEGIN
RAISERROR ('No changes allowed for table datatype_extrema.', 16, 1)
ROLLBACK TRANSACTION
END
GO
После этого вы можете скопировать максимальное значение в локальная переменная или (при использовании запросов) перекрестное соединение с этой таблицей.
Declare @max_int int
Set @max_int=(SELECT max_int FROM datatype_extrema)
IF COALESCE(@FirstInt, @max_int) < COALESCE(@SecondInt, 0)