Sql server 调用存储过程,返回值,我缺少什么?

Sql server 调用存储过程,返回值,我缺少什么?,sql-server,stored-procedures,asp-classic,Sql Server,Stored Procedures,Asp Classic,我的存储过程: CREATE PROCEDURE [dbo].[uspUserIsInGroup] @username varchar(30), @groupname varchar(30), @ReturnCount int OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ReturnCount = count(*) FROM sys.database_role_members AS m INNER JO

我的存储过程:

CREATE PROCEDURE [dbo].[uspUserIsInGroup]
@username varchar(30),
@groupname varchar(30),
@ReturnCount int OUTPUT
    AS
    BEGIN
  SET NOCOUNT ON;

      SELECT @ReturnCount = count(*)
      FROM sys.database_role_members AS m
      INNER JOIN sys.database_principals AS dp
         ON m.member_principal_id = dp.principal_id
      INNER JOIN sys.server_principals AS l
         ON dp.[sid] = l.[sid]
      INNER JOIN sys.database_principals AS r
         ON m.role_principal_id = r.principal_id
      WHERE 1=1
      AND l.name = @username
      AND r.name = @groupname
  END
我的asp代码:

 Set cn = CreateObject("ADODB.Connection")
 Set cmd = CreateObject("ADODB.Command")
 cn.Open db
 Set cmd.ActiveConnection = cn
 cmd.CommandText = "uspUserIsInGroup"
 cmd.CommandType = 4 '4=adCmdStoredProc

 cmd.Parameters.Append cmd.CreateParameter("@username", 203, 1, 100, "peds\pss_admin")
 cmd.Parameters.Append cmd.CreateParameter("@groupname", 203, 1, 100, "rolePSS_admin")
 cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 200, 2, 255)
 cmd.Execute
 response.write "value returned is: " & cmd.Parameters(2).Value & "<br />"
结果是1

我做错了什么,我错过了什么?当我从跟踪运行代码时,结果是“(没有列名)”这一事实与此有关吗


谢谢

cmd.Parameters.Append cmd.CreateParameter(“@username”,203,1100,“peds\pss\u admin”) cmd.Parameters.Append cmd.CreateParameter(“@groupname”,203,1100,“rolePSS_admin”) cmd.Parameters.Append cmd.CreateParameter(“@ReturnCount”,200,2255)

-应该是-

cmd.Parameters.Append cmd.CreateParameter("@username", adVarChar, adParamInput, 30, "peds\pss_admin")
cmd.Parameters.Append cmd.CreateParameter("@groupname", adVarChar, adParamInput, 30, "rolePSS_admin")
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount",adInteger,adParamOutput)
其中adInteger=3,adParamOutput=2,ADVARCAR=200

因此,使用硬编码数字的语句输出参数应为:

cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 3, 2)

如注释中所述,查询结果可以根据登录用户的权限进行更改

如果不想直接授予asp帐户所需的权限,可以使用

任何用户都可以看到自己的用户名、系统用户和固定用户 数据库角色。要查看其他用户,需要更改任何用户,或 用户的权限。要查看用户定义的角色,需要更改任何 角色,或角色中的成员身份

任何用户都可以查看自己的角色成员资格。查看其他角色 成员身份要求在db_securityadmin固定数据库中具有成员身份 数据库上的角色或视图定义

任何登录都可以看到自己的登录名、系统登录名和 固定服务器角色。要查看其他登录,需要更改任何登录,或 登录时的权限。要查看用户定义的服务器角色,需要 更改任何服务器角色或角色中的成员身份


asp用户是否以其他登录名运行?他们可能没有权限查看您的SSMS帐户执行的所有元数据。cmd.Parameters(2)。值应正确。您是否可以尝试修改SP,使其在测试时始终返回1,然后检查输出?“选择@ReturnCount=1;”@MartinSmith就是这样。我认为这是不可能的,因为我没有收到任何错误。但是的,基本上,当我运行在不同帐户下登录的存储过程时,我从存储过程中得到不同的结果。如果你能给我一个答案,我会记下来的。谢谢
cmd.Parameters.Append cmd.CreateParameter("@username", adVarChar, adParamInput, 30, "peds\pss_admin")
cmd.Parameters.Append cmd.CreateParameter("@groupname", adVarChar, adParamInput, 30, "rolePSS_admin")
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount",adInteger,adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 3, 2)