コードからのストアド プロシージャの呼び出しに問題があります。
私のストアドプロシージャ:
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;
ありがとう