Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 数据库中是否存在数字范围_Sql Server 2005 - Fatal编程技术网

Sql server 2005 数据库中是否存在数字范围

Sql server 2005 数据库中是否存在数字范围,sql-server-2005,Sql Server 2005,我希望你能理解我的问题,如果没有,请让我知道 在我的表格中,我有八个文本框,如下所示(用户在第一个文本框中写“25”,在第二个文本框中写“35”): 我的桌子看起来像这样: create table MyTable ( Id int identity(1,1), Code1From bigint, Code1To bigint, Code2From bigint, Code2To bigint, Code3From bigint, Code3To bigint,

我希望你能理解我的问题,如果没有,请让我知道

在我的表格中,我有八个文本框,如下所示(用户在第一个文本框中写“25”,在第二个文本框中写“35”):

我的桌子看起来像这样:

create table MyTable (
    Id int identity(1,1),
    Code1From bigint, Code1To bigint,
    Code2From bigint, Code2To bigint,
    Code3From bigint, Code3To bigint,
    Code4From bigint, Code4To bigint
)
select *
from MyTable
where
   @code1From between Code1From and Code1To
or @code1From between Code2From and Code2To
or @code1From between Code3From and Code3To
or @code1From between Code4From and Code4To
--
or @code1To between Code1From and Code1To
or @code1To between Code2From and Code2To
or @code1To between Code3From and Code3To
or @code1To between Code4From and Code4To
--
... and another 24 or statements
现在我想阻止插入数据,即allready inserted。例如: MyTable中的数据:

Id, Code1From, Code1To, Code2From, Code2To, Code3From, Code3To, Code4From, Code4To
1, 1, 10, null, null, null, null, null, null
2, 11, 20, null, null, null, null, null, null
3, 21, 30, null, null, null, null, null, null
4, 31, 40, null, null, null, null, null, null
5, 41, 50, null, null, null, null, null, null
如果用户希望将代码1(或代码2、代码3或代码4)的值从25插入到35,我应该提出一个错误 (因为从25到35的跨度在数据库中已准备就绪-ID3和ID4)。 然而,例如,用户可以插入51到55的范围

如何确定我的数据库中的跨度是否已准备就绪?现在我可以这样做:

create table MyTable (
    Id int identity(1,1),
    Code1From bigint, Code1To bigint,
    Code2From bigint, Code2To bigint,
    Code3From bigint, Code3To bigint,
    Code4From bigint, Code4To bigint
)
select *
from MyTable
where
   @code1From between Code1From and Code1To
or @code1From between Code2From and Code2To
or @code1From between Code3From and Code3To
or @code1From between Code4From and Code4To
--
or @code1To between Code1From and Code1To
or @code1To between Code2From and Code2To
or @code1To between Code3From and Code3To
or @code1To between Code4From and Code4To
--
... and another 24 or statements

有没有更简单的方法来实现这一点?

如果我理解正确,这可能会对您有所帮助

DECLARE @Table TABLE(
        FromVal1 FLOAT,
        ToVal1 FLOAT,
        FromVal2 FLOAT,
        ToVal2 FLOAT,
        FromVal3 FLOAT,
        ToVal3 FLOAT,
        FromVal4 FLOAT,
        ToVal4 FLOAT
)

INSERT INTO @Table (FromVal1,ToVal1,FromVal2,ToVal2) SELECT 1, 10, 51, 60
INSERT INTO @Table (FromVal2,ToVal2) SELECT 11, 20
INSERT INTO @Table (FromVal3,ToVal3) SELECT 21, 30
INSERT INTO @Table (FromVal4,ToVal4) SELECT 31, 40
INSERT INTO @Table (FromVal1,ToVal1) SELECT 41, 50

DECLARE @FromVal FLOAT,
        @ToVal FLOAT

SELECT  @FromVal = 25,
        @ToVal = 35

SELECT  *
FROM    @Table
WHERE   NOT(FromVal1 > @ToVal OR ToVal1 < @FromVal)
OR      NOT(FromVal2 > @ToVal OR ToVal2 < @FromVal)
OR      NOT(FromVal3 > @ToVal OR ToVal3 < @FromVal)
OR      NOT(FromVal4 > @ToVal OR ToVal4 < @FromVal)
DECLARE@Table(
从Val1浮动,
托瓦尔1号浮球,
从Val2浮动,
托瓦尔2号浮球,
从Val3浮动,
托瓦尔3号浮球,
从Val4浮动,
托瓦尔4号浮标
)
插入@Table(FromVal1、ToVal1、FromVal2、ToVal2)选择1、10、51、60
插入@Table(FromVal2,ToVal2)选择11,20
插入@Table(FromVal3,ToVal3)选择21,30
插入@Table(FromVal4,ToVal4)选择31,40
插入@Table(FromVal1,ToVal1)选择41,50
声明@FromVal FLOAT,
@托瓦尔浮球
选择@FromVal=25,
@托瓦尔=35
挑选*
来自@Table
其中不包括(FromVal1>@ToVal或ToVal1<@FromVal)
或者不是(FromVal2>@ToVal或ToVal2<@FromVal)
或者不是(FromVal3>@ToVal或ToVal3<@FromVal)
或者不是(FromVal4>@ToVal或ToVal4<@FromVal)

from是否始终等于之前的to+1?否,数据之间可能存在间隙。是否始终只有一个条目(1、2、3或4,但不是全部4)首先只有条目1,然后是条目2、3和4。最后,每一行应填写所有4个条目。因此,不允许重叠任何范围,1从-1到或2从-2到等。当然,创建一个视图,以便所有四个跨距都在一列中。。。我知道我错过了什么:)谢谢!