我仍然是SQL服务器的新手,我不知道如何做到这一点。我首先创建一个只包含我需要的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的信息,然后将所有这些表示为表。这是我的镜头:
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_NUMBER
时,它会显示The multi-part identifier "#IDlist.ID_NUMBER" could not be bound.
我该怎么做?
由于
答案 0 :(得分:1)
设置变量的方式不正确,SQL不知道应该将哪个ID_NUMBER行分配给@IDNumber变量。 您应该使用SELECT执行此操作,例如
SET @IDNumber = SELECT TOP 1 ID_NUMBER FROM #IDlist
但是,为什么要以这种方式遍历此临时表?是不是可以用这个表加入必要的数据而不是逐个加入?
答案 1 :(得分:1)
而不是循环,你将要将你的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