Sql server 2008 SQLserver将列存储为变量并在其中循环

Sql server 2008 SQLserver将列存储为变量并在其中循环,sql-server-2008,tsql,loops,Sql Server 2008,Tsql,Loops,我对SQL server还是相当陌生的,我不知道如何做到这一点。我首先创建一个表,其中只包含我需要的ID: SELECT DISTINCT ID_NUMBER INTO #IDlist FROM V_Rpt_IDs WITH (NOLOCK) WHERE ID_NUMBER in ( '1000764169' ,'1005870537' ,'1008053856' ,'1008054376' ,'1008410224' ,'1008411317' ,'1008465318' ,'10084660

我对SQL server还是相当陌生的,我不知道如何做到这一点。我首先创建一个表,其中只包含我需要的ID:

SELECT DISTINCT
ID_NUMBER
INTO
#IDlist
FROM
V_Rpt_IDs WITH (NOLOCK)
WHERE
ID_NUMBER in (
'1000764169'
,'1005870537'
,'1008053856'
,'1008054376'
,'1008410224'
,'1008411317'
,'1008465318'
,'1008466074'
,'1008492967'
,'1010546872'
,'1010554301')

Select * from #IDlist
这个很好用。但是现在我想声明一个变量来表示这个列,或者这个列中的每个项,这样我就可以执行一个循环,在这个循环中,它循环遍历每个ID号,返回关于每个ID号的信息,然后将所有ID号作为一个表来表示。这是我的照片:

Declare @IDNumber as VARCHAR(10)
Set @IDNumber = #IDlist.ID_NUMBER

DECLARE @cnt INT = 0

WHILE @cnt < (Select Count(*) From #IDlist)
BEGIN
SELECT TOP 1
NAME
,MAILING_ADDRESS_1
,MAILING_ADDRESS_CITY
,MAILING_STATE
,MAILING_ZIP
from
V_Rpt_Info
WHERE
ID_NUMBER = @IDNumber

SET @cnt = @cnt + 1

END

DROP TABLE #IDlist
但是当我将@IDNumber变量设置为IDlist.ID\u NUMBER时,它表示无法绑定多部分标识符IDlist.ID\u NUMBER

我该怎么做


感谢您设置变量的方式不正确,SQL不知道应该为@IDNumber变量指定哪个ID\U号行。 例如,您应该使用SELECT来执行此操作

SET @IDNumber = SELECT TOP 1 ID_NUMBER FROM #IDlist

但是,为什么要以这种方式循环遍历这个临时表呢?是否可以将必要的数据与此表连接起来,而不是一个接一个地进行连接?

而不是循环,您需要将ID表连接到V_Rpt_Info视图

SELECT
    NAME
  , MAILING_ADDRESS_1
  , MAILING_ADDRESS_CITY
  , MAILING_STATE
  , MAILING_ZIP
FROM V_Rpt_Info V
INNER JOIN #IDlist ID
ON V.ID_NUMBER = ID.ID_NUMBER

哦,加入也许是更好的方式。我只是没想到。