我在 t-sql 中编写了一个查询,该查询在子查询中使用了一个函数,并遇到了两个问题。想象一个广告表如下:
AdID- Name
一个选项表如下:
OptionID - OptionName
以及这两者之间的垃圾表(AdvertisementOptionLink),带有两个外键列:
AdID - OptionID
现在我想在用户选择选项时查询广告。我写了一个这样的查询:
SELECT * FROM Advertisement ad
INNER JOIN AdvertisementOptionLink aol
WHERE ad.AdvertisementID IN (SELECT AdvertisementID FROM UDF_GetAdvertisements)
现在 UDF_GetAdvertisements 是一个表值函数,它返回具有特定选项的广告列表。
有两个问题:
- 这个 UDF_GetAdvertisements 函数是否查询每一行的所有数据?我的意思是,如果我的表中有 2000 个广告,它会查询所有这些广告并返回所有广告 ID?我最好将函数返回值保存在变量中吗?
2.在这个数据库中有一些广告没有任何选项,如果用户不选择任何选项,我如何返回所有广告?
我在 t-sql 中使用表值参数通过存储过程传递选定的选项 ID。使用了这个页面的一些帮助:http: //www.sommarskog.se/arrays-in-sql-2008.html