【发布时间】:2013-10-13 17:04:44
【问题描述】:
我有这个功能:
CREATE FUNCTION [dbo].[full_ads](@date SMALLDATETIME)
returns TABLE
AS
RETURN
SELECT *,
COALESCE((SELECT TOP 1 ptype
FROM special_ads
WHERE [adid] = a.id
AND @date BETWEEN starts AND ends), 1) AS ptype,
(SELECT TOP 1 name
FROM cities
WHERE id = a.cid) AS city,
(SELECT TOP 1 name
FROM provinces
WHERE id = (SELECT pid
FROM cities
WHERE id = a.cid)) AS province,
(SELECT TOP 1 name
FROM models
WHERE id = a.mid) AS model,
(SELECT TOP 1 name
FROM car_names
WHERE id = (SELECT car_id
FROM models
WHERE id = a.mid)) AS brand,
(SELECT TOP 1 pid
FROM cities
WHERE id = a.cid) pid,
(SELECT TOP 1 car_id
FROM models
WHERE id = a.mid) bid,
(SELECT TOP 1 name
FROM colors
WHERE id = a.color_id) AS color,
COALESCE((SELECT TOP 1 fileid
FROM carimgs
WHERE adid = a.id), 'nocarimage.png') AS [image]
FROM ads a
WHERE isdeleted <> 1
有时它可以正常工作,但有时列名与值不匹配(我编写了一个包含较少列的示例结果只是为了显示问题):
ID Name City Color Image
----------------------------------------------
1 John New York Null Red
2 Ted Chicago Null Blue
如您所见,color 和 Image 值移动了一列,并继续到最后一列。
谁能告诉我问题出在哪里?
【问题讨论】:
-
您可能需要发布完整的输出,会不会是您的一个 WHERE 案例没有找到匹配项而导致后续列丢失?
-
我没有给出真实结果的原因是,它不是英文的,您可能无法识别这些值。但在所有可能找不到匹配项的情况下,我使用了 coalesce(假设返回值为 null)
标签: sql-server stored-functions