2014-07-08 85 views
0

當我在SQL Server Management Studio中執行這個查詢,出現此錯誤:無效列名工作室

'Msg 207, Level 16, State 1, Line 1 
Invalid column name 'ACCOUNT_NO'.' 

這是查詢代碼:

DECLARE @largeaccnumber INT = ACCOUNT_NO 
DECLARE @smallaccnumber INT 
SET @smallaccnumber = (SELECT LEFT(@largeaccnumber, 6)) 
SELECT DNADRX.CODE, 
     DNADDR.NAME, 
     DNADDR.TYPE, 
     DNADDR.MAIL_NAME, 
     ADDRESS_LINE1, 
     ADDRESS_LINE2, 
     ADDRESS_LINE3, 
     TOWN_CITY, 
     COUNTY_STATE, 
     COUNTY_STATE_CODE, 
     COUNTRY, 
     POST_ZIP, 
     LAST_STAT_DATE, 
     ACCOUNT_NO 
FROM DNADRX, 
    DNADDR, 
    BACCNT   
WHERE DNADDR.CODE = DNADRX.ADDRESS_CODE 
    AND DNADDR.CODE = @smallaccnumber 
ORDER BY DNADRX.CODE 

我想該查詢從3個不同的表格(DNADRX,DNADDR,BACCNT)中顯示不同表格的列中的數據(該列在查詢的SELECT位中列出),並且將所有3個表格鏈接在一起的因子是6位數代碼(BACCNT表中的ACCOUNT_NO,DNADRX表中的ADDRESS_CODE和第e DNADDR表)。最初,來自表BACCNT的ACCOUNT_NO爲8位數字,但我使用SELECT LEFT將其減少到前6位,並將此6位數值分配給變量@smallaccnumber。

每當我嘗試執行查詢時,它都會告訴我'ACCOUNT_NO'是無效的代碼名稱。我檢查了拼寫,使用智能感知進行刷新,並在查詢的第一行嘗試了'BACCNT.ACCOUNT_NO'而不是'ACCOUNT_NO',但它仍然不起作用(相反,它表示多部分標識符無法綁定當我嘗試'BACCNT.ACCOUNT_NO')。

對於SQL編碼,我真的很陌生,所以很抱歉,如果我的問題的答案非常簡單。

謝謝你的幫助:)

+5

'DECLARE @largeaccnumber INT = ACCOUNT_NO'這不是有效的語法,你不能只是創建一個變量,併爲它分配一個沒有表或任何東西的列 – Lamak

+0

@Lamak ACCOUNT_NO是表中的一列BACCNT - 我想從這個列中賦值給一個變量(這樣我可以使數字較短,從8到6位數字)。 我有點不確定你的意思是'沒有表或任何東西' - 數據庫中有許多表,包括表BACCNT。 你能幫我弄清楚創建變量的有效語法是什麼嗎?非常感謝:) – aylissewonder

+0

假設你在'BACCNT'中有多行,你想用哪一行來爲變量賦值? – GarethD

回答

0

你可以嘗試這樣的事情。

這假設你知道6個字符的代碼。如果在每個表格中都有匹配的記錄,則此查詢只會查找結果。如果一個表沒有找到匹配的記錄,這個查詢將返回NOTHING。如果你想找到一個行即使recrod從表中丟失,更換「INNER JOIN」與「LEFT OUTER JOIN」

SELECT Dnadrx.Code, 
     Dnaddr.Name, 
     Dnaddr.Type, 
     Dnaddr.Mail_Name, 
     Address_Line1, 
     Address_Line2, 
     Address_Line3, 
     Town_City, 
     County_State, 
     County_State_Code, 
     Country, 
     Post_Zip, 
     Last_Stat_Date, 
     Account_No 
    FROM Dnaddr 
     INNER JOIN BACCNT ON DNAADDR.CODE = BACCNT.ACCOUNT_NO 
     INNER JOIN Dnadrx ON Dnaaddr.Code=Dnaadrx.Address_Code 
WHERE Dnaddr.Code='YOUR 6 CHARACTER CODE GOES HERE' 
ORDER BY Dnadrx.Code;