• 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