Why TRUNCATE TABLE cannot use four-part name? I was trying to truncate a table as the following:

TRUNCATE TABLE [servername].[dbname].[schema].[table]


I  got error:


  object doesn't exist or you don't have permissions.


However, if I remove the servername part, it works.

Can anyone explain why I cannot use four part name in truncating? Thanks.
It's because TRUNCATE is DDL rather than DML

From MSDN:

TRUNCATE TABLE 
    [ { database_name .[ schema_name ] . | schema_name . } ]
    table_name
[ ; ]


Also, regarding permissions:


  The minimum permission required is ALTER on table_name. TRUNCATE TABLE
  permissions default to the table owner, members of the sysadmin fixed
  server role, and the db_owner and db_ddladmin fixed database roles,
  and are not transferable. However, you can incorporate the TRUNCATE
  TABLE statement within a module, such as a stored procedure, and grant
  appropriate permissions to the module using the EXECUTE AS clause.


Notice the db_ddladmin requirement.  As DDL, the four-part naming isn't allowed.  Compare it to Technet info on the FROM clause:


  If the table or view exists in another database on the same instance
  of SQL Server, use a fully qualified name in the form
  database.schema.object_name.
  
  If the table or view exists outside the instance of SQL Server, use a
  four-part name in the form linked_server.catalog.schema.object. For
  more information, see sp_addlinkedserver (Transact-SQL). A four-part
  name that is constructed by using the OPENDATASOURCE function as the
  server part of the name can also be used to specify the remote table
  source. When OPENDATASOURCE is specified, database_name and
  schema_name may not apply to all data sources and is subject to the
  capabilities of the OLE DB provider that accesses the remote object.


Sources:

http://msdn.microsoft.com/en-us/library/ms177570.aspx

http://technet.microsoft.com/en-us/library/ms177634.aspx

Edit:
To answer your question on how to do it, write a stored procedure in the target database.  Grant access to execute the procedure, and call truncate from the procedure.