简体   繁体   中英

Invalid Column Name in SQL Server Management Studio

When I execute this query in SQL Server Management Studio, this error appears:

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

This is the code for the query:

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

I want the query to display the data from the columns of the different tables (the columns are listed in the SELECT bit of the query) from 3 different tables (DNADRX, DNADDR, BACCNT), and the factor linking all 3 tables together is the 6 digit code (ACCOUNT_NO in the BACCNT table, ADDRESS_CODE in the DNADRX table and CODE in the DNADDR table). Originally, ACCOUNT_NO from table BACCNT was 8 digits long, but I reduced it to the first 6 digits using SELECT LEFT and assigned this 6 digit value to the variable @smallaccnumber.

Whenever I try to execute the query, it keeps telling me that 'ACCOUNT_NO' is an invalid code name. I have checked the spelling, refreshed using IntelliSense and tried 'BACCNT.ACCOUNT_NO' instead of just 'ACCOUNT_NO' on the first line of the query but it still won't work (instead it says that the multi-part identifier could not be bound when I try 'BACCNT.ACCOUNT_NO').

I am really new to SQL coding so sorry if the answer to my problem is really simple.

Thank you for your assistance :)

You can try something like this.

This assumes you know the 6 character code. This query will only find results IF there is a record matching in EVERY table. If one table doesn't find a matching record this query will return NOTHING. If you want to find a row even if a recrod is missing from a table, replace the "INNER JOIN" with "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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM