我有一个包含大量变量ID的工作查询。我想知道是否有办法从下面的查询中创建存储过程并传入一组ID,而不是在我需要运行新查询时复制和粘贴每个ID?
这是查询。身份证一直在变化,所以我试图找到一种方法,这样做更容易,但我没有太多运气。
我考虑过在存储过程中使用游标并只传递每个ID,但这看起来很麻烦且效率低下。
SELECT gm.geoId, T.number As surveyID, 0 as SpeciesCount
FROM (
VALUES (1994328036),(1994328037),(1994328038),(1994328039),(1994328040),(1994328041),(1994328042),(1994328043),
(1994328044),(1994328045),(1994328046),(1994328047),(1994328048),(1994328049),(1994328050),(1994328051),
(1994328052),(1994328053),(1994328054),(1994328055)
) AS T(number)
CROSS JOIN dbo.groupBiology gm
答案 0 :(得分:1)
您可以像这样创建table-valued function
(TVF):
CREATE FUNCTION tvf_GetIDs ()
RETURNS
@output TABLE ( data int )
AS
BEGIN
INSERT INTO @output (data) VALUES
(1994328036),(1994328037),(1994328038),(1994328039),
(1994328040),(1994328041),(1994328042),(1994328043),
(1994328044),(1994328045),(1994328046),(1994328047),
(1994328048),(1994328049),(1994328050),(1994328051),
(1994328052),(1994328053),(1994328054),(1994328055)
RETURN
END
GO
然后在需要ID的地方使用此功能,例如
SELECT *
FROM Customers AS c
INNER JOIN (SELECT * FROM tvf_GetIDs()) t ON c.CustID = t.data
只需更改ID,您就需要更新TVF。