1

コードからのストアド プロシージャの呼び出しに問題があります。

私のストアドプロシージャ:

ALTER PROCEDURE [dbo].[ChangePassword]
    @param1 sysname,
    @param2 sysname

AS
BEGIN
DECLARE @sql nvarchar(500)
SET @sql = 'ALTER LOGIN ' + @param1 + ' WITH PASSWORD = '''+ @param2 +'''';
EXEC sp_executesql @sql

END;

これを SQL エディターから実行すると正常に動作しますが、関数からこれを呼び出すと、次のようになります。

        using (var command = new OdbcCommand("{call ChangePassword(?,?)}", connection))
        {
            try
            {
                command.CommandType = CommandType.StoredProcedure;
                //command.Parameters.AddWithValue("@param1", user.Username);
                //command.Parameters.AddWithValue("@param2", user.password);

                command.Parameters.Add("@param1", OdbcType.VarChar, 50).Value = user.Username;
                command.Parameters.Add("@param2", OdbcType.VarChar, 50).Value = user.password;

                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
                return true;
            }

エラーが発生しています

ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'MYPASSWORD'. 

@param2付近

誰かがこれで私を助けてください。

私は道を見つけました... :)

   ALTER PROCEDURE [dbo].[ChangePassword]
    @param1 sysname,
    @param2 sysname

AS
BEGIN
DECLARE @sql nvarchar(500)
SET @sql = 'ALTER LOGIN ' + @param1 + ' WITH PASSWORD = '+ @param2 +'';
EXEC sp_executesql @sql

END;

これらの構文で作業します:)しかし、SQLエディターから実行すると、以前のバージョンのストアドプロシージャの関数から呼び出されたときと同じエラーが発生します。

誰かがこれを説明できますか?

編集

最後は Marc Gravell のおかげです。

ALTER PROCEDURE [dbo].[ChangePassword]
    @param1 sysname,
    @param2 sysname

AS
BEGIN
DECLARE @SQL nvarchar(4000)

SET @SQL = N'ALTER LOGIN ' + QUOTENAME(@param1) + N' WITH PASSWORD = ' + QUOTENAME(@param2,'''');
EXEC(@SQL);

END;

ありがとう

4

2 に答える 2