Run sys.sp_spaceused @objname = N'YourTable'; to see the space used by your table.
If there is no unused space, then your data is really taking up that space
If there is a lot of unused space, you could try creating a new filegroup and moving the text/varchar(max) columns to this new file group, and shrinking the database DBCC SHRINKDB
After that your primary filegroup will take up less space, and you can shrink the "offending" file using DBCC SHRINKFILE
, whenever problem arises.
Creating a new filegroup can be done from SSMS, in the database properties, files page. You can generate the sql script from there to see what's going on.
Moving text columns to a different filegroup can be made by using the TEXTIMAGE_ON { filegroup| "default" } in CREATE TABLE
Sorry: no alter table possible, no individual column to different filegroup, but all "big" columns at once. So you have to do it by hand or show your table in a new database diagram (in SSMS studio) and change the property ... sorry I don't know it's name, something like "Text/Image filegroup" (I suppose, I've got Spanish SSMS), but it's there when you see the table properties in the database diagram designer.
Advantages: less fragmentation on the main table, faster table/clustered index sacans and possiblity to shrink only the file you're interested in: the with the problematic "big" columns.