大量的变量ID

时间:2015-01-09 15:10:17

标签: sql sql-server tsql sql-server-2012

我有一个包含大量变量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

1 个答案:

答案 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。