我的表Clients
包含许多列,但我的目标是两个特定列ClientId
和PIN
。我将要提供的示例没有多大意义,但我只是在学习更高级的SQL(T-SQL
)主题,而我的最终目标与此处的内容有很大不同。
所以我创建了一个函数,我希望返回符合特定搜索条件的所有行。所以我有这个:
CREATE FUNCTION ufn_NumberOfClients (@ClientId INT)
RETURNS @retContactInformation TABLE
(
-- Columns returned by the function
ClId int PRIMARY KEY NOT NULL,
PIN nvarchar(50) NULL
)
AS
BEGIN
DECLARE
@ClId INT,
@PIN nvarchar(50)
SELECT @ClId = ClientId, @PIN = PIN
FROM Client
WHERE PIN LIKE '%7788%'
IF @ClientId IS NOT NULL
BEGIN
INSERT @retContactInformation
SELECT @ClId, @PIN;
END;
RETURN;
END
但是当我执行函数时:
SELECT * FROM
ufn_NumberOfClients(4)
我只得到一个结果。即使这是一个有效的结果,如果我只执行
SELECT * FROM Client
WHERE PIN LIKE '%7788%'
我得到5个结果,该函数只返回最后一个。
值得一提的两件事。我用来从表中编写ClId int PRIMARY KEY NOT NULL,
函数的示例在此之后不是DECLARE
,但如果我不这样做,我会收到错误。另外,我传递变量,但我认为它没有被使用,因此它不应该影响行为(或者至少我认为是这样)。
那么如何通过函数返回与搜索crieria匹配的所有结果?
答案 0 :(得分:2)
您实际上现在只在表变量中插入一行,请改为尝试:
CREATE FUNCTION ufn_NumberOfClients (@ClientId INT)
RETURNS @retContactInformation TABLE
(
-- Columns returned by the function
ClId int PRIMARY KEY NOT NULL,
PIN nvarchar(50) NULL
)
AS
BEGIN
INSERT INTO @retContactInformation
SELECT ClientId, PIN
FROM Client
WHERE PIN LIKE '%7788%';
RETURN;
END