我将这个SP与MsSQL一起使用。如何将其转换为MySql?
由于语法错误,我不允许创建过程。
目标是从用户那里收到一个字符串,如下所示: (ReportId,UserName) - 如果在变量中找到,则发送回允许其他发送回拒绝访问。
感谢。
Procedure [dbo].[Permission]
@ReportId As Int
,@UserName As Varchar(50)
As
Declare
@Result As Varchar(250)
Select
@Result = IsNull((
Select
IsNull([permission].[Message], '')
From
[permission]
Join
[users]
On [users].[ID] = [permission].[User ID]
Where
[users].[User Name] = @UserName
And [permission].[Report ID] = @ReportId
), 'Access denied')
Select
Case
When @Result = '' Then 'Allowed'
Else @Result
End [Result]
答案 0 :(得分:1)
不是全面的清单,但是:
@
符号,这些符号用于会话变量;或者,您可能希望用某种标准化的前缀替换它们,以防止表格中的字段名称存在歧义。[
和]
替换为“IsNull
变为IfNull
SELECT @Result = IsNull(...
,将=
更改为:=
另外,用;
结束你的陈述,我不知道为什么有这么多MSSQL用户喜欢跳过它们。
对于常规create proc语法,请转到CREATE PROCEDURE。
答案 1 :(得分:0)
我将您的SP翻译为MySQL语法:
DELIMITER $$
DROP PROCEDURE if exists Permission$$
CREATE PROCEDURE Permission(
p_ReportId Int,
p_UserName Varchar(50)
)
BEGIN
set @Result = '';
set @Result =
coalesce(
(Select
coalesce(permission.Message, '')
From permission Inner Join users
On users.ID = permission.`User ID`
Where
users.`User Name` = p_UserName
And permission.`Report ID` = p_ReportId)
, 'Access denied');
Select
Case
When @Result = '' Then 'Allowed'
Else @Result
End as Result;
END $$
delimiter ;