Tach!
Erlaubt Microsoft diese erste Schreibweise nicht?
Microsoft hat nur die Syntax ihres SQL-Dialekts definiert. Wie das PDO aus dem PHP-Code die Statements erzeugt, ist Sache von PDO. Wenn dabei ein Statement rauskommt, das im MSSQL nicht ausgeführt werden kann, dann ist das ein Fehler in der PDO-Extension. Oder ein Fehler des Verwenders.
Zum length-Parameter von bindParam() sagt das PHP-Handbuch: To indicate that a parameter is an OUT parameter from a stored procedure, you must explicitly set the length.
Lass das weg, sonst wird das wohl als Ausgabe-Parameter erkannt und das ergibt bei einem INSERT keinen Sinn.
dedlfix.