O problema é que sua string não um formato de data e hora do SQL Server aceito. O SQL Server reconhece o ISO8601 formato, que é:
yyyy-mm-ddThh:mi:ss.mmm
Qual seria 2013-03-02T16:48:00 para sua data acima.
Consulte Estilos de data e hora seção.
Portanto, a seguinte declaração falhará:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Se você converter a string para o ISO8601 formato, a instrução funcionará:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
SQL Fiddle com demonstração .
Você pode atualizar seu formato para um reconhecimento do SQL Server e converter a string para uma data e hora em uma instrução:
declare @date nvarchar(max) = '20130302T164800'
select cast(left(@date, 4)
+ '-' + substring(@date,5,2)
+ '-' + substring(@date,7,5)
+ ':' + substring(@date,12,2)
+ ':' + substring(@date,14,2) as datetime)
SQL Fiddle com demonstração .
Este é apenas um exemplo, você pode convertê-lo para qualquer formato reconhecido pelo SQL Server, mas isso o converte para ISO8601 . Basicamente, converta-o para um formato diferente para permitir que a conversão funcione.