Q:

When I insert 60,000 rows to a newly created table. This error appears. String or binary data would be truncated. The statement has been terminated

When I try to insert data to a newly created table. It gives me an error, 

Msg 8152, Level 16, State 13, Line 3 String or binary data would be
  truncated. The statement has been terminated.

This is the script to create the table. The datatypes are based from the source tables and nothing has been changed. 
IF EXISTS (
        SELECT *
        FROM sys.objects
        WHERE object_id = OBJECT_ID(N'[ODSCustomerContact]')
            AND type IN (N'U')
        )
    DROP TABLE [ODSCustomerContact]
GO

CREATE TABLE ODSCustomerContact (
    CustomerContactInt INT NOT NULL identity PRIMARY KEY,
    ClientName NVARCHAR(30) NULL,
    ContactFirstName NVARCHAR(60) NULL,
    ContactLastName NVARCHAR(60) NULL,
    Position NVARCHAR(30) NULL,
    Phone NVARCHAR(30) NULL,
    MobilePhone NVARCHAR(30) NULL,
    EmailAddress NVARCHAR(30) NULL
    )

When I try to insert the error appears.
INSERT INTO sec_ods.dbo.ODSCustomerContact
SELECT d.SoldToShortName AS Clientname,
    e.FirstName AS Contact_FirstName,
    e.LastName AS Contact_LastName,
    e.Position,
    e.Phone,
    e.MobilePhone,
    e.EmailAddr AS EmailAdress
FROM projectrule d
LEFT JOIN BusinessEntityAssociation BEA
    ON d.soldtoID = BEA.customerID
LEFT JOIN BusinessEntityContact e
    ON e.BusinessEntityID = BEA.BusinessEntityID
WHERE d.SoldToShortName IS NOT NULL

Msg 8152, Level 16, State 13, Line 3 String or binary data would be
  truncated. The statement has been terminated.

A:

One of the columns in the destination table does not accept the same data-length as the source table.
You should probably generate the destination table by scripting the source table. Otherwise you might end up in a situation like this, where the source column Phone might be defined as varchar(50), but the destination table has it defined as varchar(30).
Thus, there's a risk for data loss, and this error will be thrown. 

