具有存储过程和Windows身份验证的用户特定表

时间:2013-05-13 13:46:16

标签: sql-server vb.net stored-procedures

我需要一个程序,从我的sql server数据库为我的visual studio programm(vb.net)提供用户特定数据。工厂的工人应该只看到自己的时间表。我有一个带有Workers_ID和Name的表(该名称与域中的Windows用户名相同。我们的秘书处通过另一个前端将其放入)。我的想法是编写一个paramtetric存储过程,它给我(取决于SUSER_NAME)Workers_ID,然后我可以通过这个Workers_ID选择其他表(因为它是其他表中的外键)。这是我的代码:


CREATE PROCEDURE USERTAB as
DECLARE @TEMPUSER_ID as int
declare @MyDomainLogin varchar(30)

Suser_Name gives me the Domain\Username. I cut the "Domain\" part off, since i dont need it.

BEGIN
SET @MyDomainlogin = SUSER_NAME()
SET @MyDomainLogin = SUBSTRING(@MyDomainLogin,CHARINDEX('\',@MyDomainLogin) + 1,30) 

SELECT @TEMPUSER_ID = Workers_ID FROM Workers
WHERE Name = @MyDomainLogin
SELECT * FROM TimeTable
WHERE Workers_ID = @TEMPUSER_ID
END

exec USERTAB

结果给了我正确的表,但一遍又一遍,直到我收到错误消息:

Msg 217, Level 16, State 1, Procedure USERTAB, Line 14

超出最大存储过程,函数,触发器或视图嵌套级别(限制32)。

看起来像一个我不知道的触发器......如果你们中的一个人可以给我一个手,真的会非常棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

应该是:

CREATE PROCEDURE USERTAB as
...
END
GO -- this is missing
exec USERTAB

您的“exec USERTAB”位于存储过程中,因为您没有终止CREATE批处理以显示存储过程的结束

那么,你目前拥有什么

CREATE PROCEDURE USERTAB as
...
END

exec USERTAB -- this is inside the proc so it calls itself
GO -- this is the end of the batch!!!!