我从代码调用存储过程时遇到问题。
我的存储过程:
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;
谢谢