Q:

ALTER LOGIN gives Incorrect Syntax near 'PASSWORD' error

I have created a stored procedure that can be called to change the password of a SQL Server 2008 Login.  When I run the procedure, I get the error:

Incorrect syntax near 'PASSWORD'.

Here is my stored procedure:
ALTER PROCEDURE [dbo].[proc_update_user]
(
    @arg1       varchar(255) = null,
    @arg2       varchar(255) = null
) AS
BEGIN

DECLARE @SQLString NVARCHAR(500);

SET @SQLString = 'ALTER LOGIN ' + @arg1 + ' WITH PASSWORD = ''' + @arg2 + '''';
EXEC sp_executesql @SQLString

END

I am calling the procedure with exec proc_update_user 'Billy' , 'newPassword';
If I run the following query in SQL Server Management Studio, the user is updated without issues:
ALTER LOGIN Billy WITH PASSWORD = 'newPassword';

Any idea why my procedure is giving the error?
Edit:
This is the code I use to call the stored procedure in C++.  I added this to compare to one of the answers given.  I don't think my problem lies in my C++ code because executing exec proc_update_user 'Billy' , 'newPassword' in management studio is giving me the error.  The stored procedure obviously doesn't work in my application either.
strcpy(szProcName,"{?=call dbo.proc_update_user(?,?)}");
rc=SQLPrepare(sqlc.g_hstmt,(SQLCHAR*)szProcName,(SQLINTEGER)strlen(szProcName));
            rc=SQLBindParameter(sqlc.g_hstmt,1,SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER,0,0,
                (SQLPOINTER) &test_val,0,&m_cbRetValue);
rc=SQLBindParameter(sqlc.g_hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_VARCHAR,sizeof(Login_Name),0,
                Login_Name,sizeof(Login_Name),&Login_Name_Len);
rc=SQLBindParameter(sqlc.g_hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_VARCHAR,sizeof(Password),0,
                Password,sizeof(Password),&Password_Len);
rc = SQLExecute(sqlc.g_hstmt);

A:

As per the MSDN you have to also pass OLD_PASSWORD parameter.
ALTER LOGIN myUser WITH 
    PASSWORD = 'newPassword' 
    OLD_PASSWORD = 'oldpass';
GO

So now your SP will look like this-
ALTER PROCEDURE [dbo].[proc_update_user]
(
    @arg1       varchar(255) = null,
    @arg2       varchar(255) = null,
    @oldpass varchar(255) = null,
) AS
BEGIN

DECLARE @SQLString NVARCHAR(500);

SET @SQLString = 'ALTER LOGIN ' + @arg1 + ' WITH PASSWORD = ' + QUOTENAME(@arg2, '''') + ' OLD_PASSWORD = ' + QUOTENAME(@oldpass, '''');
EXEC sp_executesql @SQLString

END

