CREATE TABLE #Test (a VARCHAR(30))
INSERT INTO #Test (a) SELECT REPLICATE('A', 29)
ALTER TABLE #Test
ALTER COLUMN a VARCHAR (29)
--this works fine
DROP TABLE #Test
GO
CREATE TABLE #Test (a VARCHAR(30))
INSERT INTO #Test (a) SELECT REPLICATE('A', 30)
ALTER TABLE #Test
ALTER COLUMN a VARCHAR (29)
--Throws error message because it would change the data
GO
--You can figure out which rows will return an error with a query like this one :
--SELECT * WHERE Column <> Convert(NewDataType, Column)
SELECT * FROM #Test WHERE a <> CONVERT(VARCHAR(29), a)
DROP TABLE #Test