Использование параметра DateTime - лучший способ.Однако, если вы все еще хотите передать DateTime в виде строки, тогда CAST не требуется, если используется формат, не зависящий от языка.
например,
Учитывая таблицу, созданную как:
create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
Всегда должно работать следующее:
update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
Будет работать следующее:
SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
Однако это не будет:
SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1
Это связано с тем, что YYYY-MM-DD не является языковым форматом (с точки зрения сервера SQL).
Формат ISO YYYY-MM-DDThh: mm: ss такжене зависит от языка и полезен, когда вам нужно передать ненулевое время.
Дополнительная информация: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes