直接做是做不到的,可以转个弯实现,在此表里加一个FLAG字段来区分是用存储过程(=1)或其它插入(=0),然后添加触发器,在触发器里判断FLAG值 如果是0就回滚。

解决方案 »

  1.   

    alter table tb add flag big default 0create procedure p_1as
    --记住一定要使flag=1,go然而你用insert 时,不主动为FLAG赋值时,FLAG=0的,create trigger ti_tb on tb
    for insert
    as
    if exists(select 1 from inserted where flag=0)
    ROLLBACK TRANSACTION
    return
    go
      

  2.   

    这样:
    在数据库中添加一个用户aa,默认无任何权限
    把此用户加入到db_securityadmin角色你的存储过程这样写:CREATE PROCEDURE aa.pp AS
    --授予用户aa插入权限
    GRANT  INSERT
    ON 表
    TO aa
    --执行实际插入操作
    insert into 表 values(1,'ss')
    --拒绝aa对该表的插入权限
    DENY INSERT
    ON 表
    TO aa