我需要一个程序,从我的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)。
看起来像一个我不知道的触发器......如果你们中的一个人可以给我一个手,真的会非常棒!
谢谢!
答案 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!!!!