获得结果和错误

时间:2016-01-25 18:10:42

标签: sql-server stored-procedures

我正在使用SQL Server 2014。

我已将存储过程的EXECUTE授予用户帐户,但是当sp运行时,我得到结果和错误。这是来自SSMS,选择了“结果到文本”:

set nocount on
use trx_d
go

select specific_name
  from information_schema.routines 
 where routine_type = 'PROCEDURE'
   and specific_name = 'proc_plan_get_count';
go

exec dbo.proc_plan_get_count 225, 2016;
go

specific_name
----------------------------------
proc_plan_get_count

status_code          status_count
-------------------- ------------
Approved             1

Msg 15151, Level 16, State 1, Procedure proc_plan_get_count, Line 25
Cannot find the object 'proc_plan_get_count', because it does not exist or you do not have permission.

我尝试删除并重新创建sp(它只包含一个带有WHERE子句的SELECT语句,该子句反映了传入的参数)。我认为这可能会清除蜘蛛网,因为当我尝试创建一个新的简单程序时,我没有任何问题。下降& create无效,上面出现的行为相同。

我更改了sp的内容以避免任何表引用,运行它并且我没有收到任何错误。放回SELECT stmt导致问题重新浮出水面。但是,此用户帐户位于db_datareader角色中(您可以在上面的输出中看到它已成功读取该表)。

然后我尝试用新名称重新创建程序(最后我添加了一个“2”),运行时我没有收到任何错误。

我非常困惑,感谢任何有关解决问题的帮助,

- =查

1 个答案:

答案 0 :(得分:1)

成为SQL Server的新手,这个让我有点意外。当我请求通过SSMS修改代码时,这是代码的要点:

USE [trx_d]
GO
/****** Object:  StoredProcedure [dbo].[proc_plan_get_count]    Script Date: 1/25/2016 12:36:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_plan_get_count] 
    -- Add the parameters for the stored procedure here
    @EmployeeId int = 0, 
    @PlanYear int = 0
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT stdcode as status_code, COUNT(*) as status_count
        FROM **********
        WHERE yr = @PlanYear AND
              empnum = @EmployeeId
        GROUP BY stdcode

END

GRANT EXEC ON [dbo].proc_plan_get_count TO *****

因此,由于在END关键字之后没有GO,因此GRANT stmt实际上是源代码的一部分,并且是sp执行时的错误源。

我们为什么现在点击它?我们正在切换到新的数据库登录,虽然新登录看起来具有与旧登录相同的所有权限,但旧登录必须有一些其他权限,它们不会在GRANT EXEC步骤中做出反应。它会抛出警告而不是错误:

status_code          status_count
-------------------- ------------
Approved             3

Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
相关问题