Sql server 在表和函数中的值之间查找

Sql server 在表和函数中的值之间查找,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有下表: 表: CREATE TABLE t1 ( cola int, colb int, colc varchar(10), cold varchar(10) ); cola colb colc cold ------------------------- 2 4 x z 6 8 ab zub 10 12 jc me 我有返回表值的函数 函数返回: f_column --

我有下表:

表:

CREATE TABLE t1
(
   cola int,
   colb int,
   colc varchar(10),
   cold varchar(10)
);

cola   colb   colc   cold
-------------------------
2      4      x      z
6      8      ab     zub
10     12     jc     me
我有返回表值的函数

函数返回:

f_column
----
1
2
5
11
现在我想显示colc,cold from t1,其中函数结果f_列位于表t1的cola和colb之间

预期结果:

colc   cold
------------
x      z
jc     me

您需要将函数结果与表连接起来。可能是这样的:

SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb

假设tf_列是一个临时表,只有一列f_列

,则需要将函数结果与表连接起来。可能是这样的:

SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb

假设tf_column是一个临时表,只有一列f_column

,考虑到您所说的函数返回一个数据集,这就假设函数是一个表值函数

有了表值函数,您可以在其上使用FROM,就像aa table一样,如果您想加入它,您必须使用APPLY。因此,这是一个非常简单的查询:

SELECT t1.colc, t1.cold
FROM dbo.YourFunction (Parameter1, Parameter2) YF
     JOIN dbo.t1 ON YF.f_column BETWEEN t1.cola AND t1.colb;
上面的示例假设您的函数有两个参数。您需要更改它,使其与您的相关

编辑:作为完整的工作示例:


考虑到您所说的函数返回一个数据集,这假设该函数是一个表值函数

有了表值函数,您可以在其上使用FROM,就像aa table一样,如果您想加入它,您必须使用APPLY。因此,这是一个非常简单的查询:

SELECT t1.colc, t1.cold
FROM dbo.YourFunction (Parameter1, Parameter2) YF
     JOIN dbo.t1 ON YF.f_column BETWEEN t1.cola AND t1.colb;
上面的示例假设您的函数有两个参数。您需要更改它,使其与您的相关

编辑:作为完整的工作示例:

这里有很多假设 这可能是一个表值函数不知道它需要什么参数,如果有的话

可以使用函数的联接或交叉应用

CREATE FUNCTION f_column ()
RETURNS TABLE
AS RETURN
(
    SELECT Ret =  1
    UNION SELECT 2
    UNION SELECT 5
    UNION SELECT 11

)
GO

CREATE TABLE t1
(
   cola int,
   colb int,
   colc varchar(10),
   cold varchar(10)
);

INSERT INTO dbo.t1
(cola,colb,colc,cold)
VALUES
(2, 4, 'x', 'y') , (6, 8, 'ab', 'zub') , (10, 12, 'jc', 'me') 

SELECT 
 T.colc
,T.cold 
FROM dbo.t1 T
CROSS APPLY dbo.f_column() F WHERE F.Ret BETWEEN T.cola AND T.colb
--JOIN dbo.f_column() F ON F.Ret BETWEEN T.cola AND T.colb

DROP TABLE dbo.t1
DROP FUNCTION f_column
这里有很多假设 这可能是一个表值函数不知道它需要什么参数,如果有的话

可以使用函数的联接或交叉应用

CREATE FUNCTION f_column ()
RETURNS TABLE
AS RETURN
(
    SELECT Ret =  1
    UNION SELECT 2
    UNION SELECT 5
    UNION SELECT 11

)
GO

CREATE TABLE t1
(
   cola int,
   colb int,
   colc varchar(10),
   cold varchar(10)
);

INSERT INTO dbo.t1
(cola,colb,colc,cold)
VALUES
(2, 4, 'x', 'y') , (6, 8, 'ab', 'zub') , (10, 12, 'jc', 'me') 

SELECT 
 T.colc
,T.cold 
FROM dbo.t1 T
CROSS APPLY dbo.f_column() F WHERE F.Ret BETWEEN T.cola AND T.colb
--JOIN dbo.f_column() F ON F.Ret BETWEEN T.cola AND T.colb

DROP TABLE dbo.t1
DROP FUNCTION f_column

功能是什么?它将以什么作为输入参数?它还桌子吗?更多地介绍函数什么是函数?它将以什么作为输入参数?它还桌子吗?详细介绍函数不能对函数使用联接。你必须使用APPLY,OP特别声明它是一个函数,而不是一个临时表。如果是临时表,则名称将以哈希开头。例如,tf_table.不能对函数使用JOIN。你必须使用APPLY,OP特别声明它是一个函数,而不是一个临时表。如果是临时表,则名称将以哈希开头。例如tf_table.Oh,@Larnu提供了相同的解决方案ha,几乎相同!哦,@Larnu提供了相同的解决方案哈,几乎相同!