0

我需要一个程序,从我的 sql 服务器数据库中为我的 Visual Studio 程序(vb.net)提供用户特定的数据。工厂里的工人应该只看到自己的时间表。我有一个带有 Workers_ID 和名称的表(名称与域中的 windows 用户名相同。我们的秘书通过另一个前端将其放入)。这个想法是编写一个参数存储过程,它给我(取决于 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)。

看起来像一个我不知道的触发器......如果你们中的一个能给我一只手,那真的很棒!

谢谢!

4

1 回答 1

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!!!!
于 2013-05-13T13:49:29.933 回答