bal*_*_88 1 sql sql-server ssms sql-server-2008
我有一个表,如果没有特定的键,我必须插入数据.我决定编写一个存储过程来插入数据.我想做的是:
我想在一个脚本文件中完成所有这些操作,以便没有人知道存在的过程存在.
这是我有的:
创建
CREATE PROCEDURE My_Proc(@key varchar(10))
AS
BEGIN
IF NOT EXISTS (SELECT * FROM [dbo].[My_Table] WHERE [key] = @key)
INSERT INTO [dbo].[My_Table] (key, created, modified)
VALUES (@key, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
END
Run Code Online (Sandbox Code Playgroud)
插入
EXECUTE My_Proc 99241
GO
EXECUTE My_Proc 99242
GO
EXECUTE My_Proc 99243
GO
Run Code Online (Sandbox Code Playgroud)
下降
DROP PROCEDURE My_Proc
Run Code Online (Sandbox Code Playgroud)
现在我在SQL Server Management Studio中右键单击我的数据库,单击New Query并粘贴上面的查询.我得到以下输出:
(1 row(s) affected)
(1 row(s) affected)
Msg 217, Level 16, State 1, Procedure My_Proc, Line 9
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
(1 row(s) affected)
Msg 217, Level 16, State 1, Procedure My_Proc, Line 9
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚导致错误的原因.此外,当我EXECUTE在SSMS上突出显示特定命令时EXECUTE My_Proc 99241,数据插入时没有任何错误.
创建过程后需要GO.我相信第一个"EXECUTE My_Proc 99241"作为程序的一部分被包含在内,因为缺少GO,所以基本上你有一个递归调用.
创建过程语句(以及函数和类似语句)将所有内容都带到批处理的末尾,这就是为什么它们必须后跟"GO"或文件结尾.
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |