B3表的date字段记录:C1表发生INSERT的日期。
B3表的name字段记录:是谁在C1表中执行了INSERT操作。
我知道date可以等于getdate(),
但name需要程序客户端将“操作人的姓名”传值进来,触发器如何接收程序客户端的传值呢?
10 个解决方案
#1
触发器是不能传值的,我觉得你可以你在c1表插入的时候就插入用户名不行吗,
这样触发器就能得到用户名了
这样触发器就能得到用户名了
#2
微软的标准做法,登录触发器,登录的时候给每个用户建一个临时表,并且在表里赋值当前用户是谁,触发器里从这个临时表里查当前用户
http://msdn.microsoft.com/zh-cn/library/bb326598.aspx
http://msdn.microsoft.com/zh-cn/library/bb326598.aspx
#3
如果不是你自己系统中设定的用户,可以这样取他的机器名用户等
SELECT
LOGINAME, --连接的时候使用的哪个SQL登陆用户
HOSTNAME, --客户端的机器名
NT_USERNAME, --客户端的登陆用户)
pROGRAM_NAME --是从查询分析器,还是应用程序来执行的
FROM MASTER..SYSPROCESSES
WHERE SPID=@@SPID
#4
愚见。。
1.在C1中增加一个"操作人"字段..那么利用触发器就可以从inserted表中得到"操作人"了;
2.用存储过程,把C1和B3的insert写在一个存储过程里,存储过程加个“@操作人”的参数,
在程序中调用这个存储过程时用操作人传入去就可以..
1.在C1中增加一个"操作人"字段..那么利用触发器就可以从inserted表中得到"操作人"了;
2.用存储过程,把C1和B3的insert写在一个存储过程里,存储过程加个“@操作人”的参数,
在程序中调用这个存储过程时用操作人传入去就可以..
#5
SYSPROCESSES 这里可以获得LZ想要的
#6
同意楼上!2中方法均可,我通常用这两种方法,如果字段太多的话我就写触发器,这样前台编码省力,字段少的话就写个存储过程,并套上事务。
#7
我之所以没在C1中增加一个"操作人"字段,是因为不但每次INSERT时要记录,而且以后所有发生的UPDATA也要记下来,所以单独做了一个B3表,专门记录所有的INSERT、UPDATA的操作日期和操作人。
#8
如果每一个用户都在sql sqlserver中有对应的用户,
操作人的姓名可以取:suser_sname()
如果所有的连接都用同一个用户,即所有人的suser_sname()相同,
只能在C1表增加操作人的姓名字段,客户端程序自行维护该字段的值
操作人的姓名可以取:suser_sname()
如果所有的连接都用同一个用户,即所有人的suser_sname()相同,
只能在C1表增加操作人的姓名字段,客户端程序自行维护该字段的值
#9
这本来就不是Sql解决的问题
在程序代码中去处理,这就是一个日志记录的问题
在程序代码中去处理,这就是一个日志记录的问题
#10
数据库操作日志!
#1
触发器是不能传值的,我觉得你可以你在c1表插入的时候就插入用户名不行吗,
这样触发器就能得到用户名了
这样触发器就能得到用户名了
#2
微软的标准做法,登录触发器,登录的时候给每个用户建一个临时表,并且在表里赋值当前用户是谁,触发器里从这个临时表里查当前用户
http://msdn.microsoft.com/zh-cn/library/bb326598.aspx
http://msdn.microsoft.com/zh-cn/library/bb326598.aspx
#3
如果不是你自己系统中设定的用户,可以这样取他的机器名用户等
SELECT
LOGINAME, --连接的时候使用的哪个SQL登陆用户
HOSTNAME, --客户端的机器名
NT_USERNAME, --客户端的登陆用户)
pROGRAM_NAME --是从查询分析器,还是应用程序来执行的
FROM MASTER..SYSPROCESSES
WHERE SPID=@@SPID
#4
愚见。。
1.在C1中增加一个"操作人"字段..那么利用触发器就可以从inserted表中得到"操作人"了;
2.用存储过程,把C1和B3的insert写在一个存储过程里,存储过程加个“@操作人”的参数,
在程序中调用这个存储过程时用操作人传入去就可以..
1.在C1中增加一个"操作人"字段..那么利用触发器就可以从inserted表中得到"操作人"了;
2.用存储过程,把C1和B3的insert写在一个存储过程里,存储过程加个“@操作人”的参数,
在程序中调用这个存储过程时用操作人传入去就可以..
#5
SYSPROCESSES 这里可以获得LZ想要的
#6
同意楼上!2中方法均可,我通常用这两种方法,如果字段太多的话我就写触发器,这样前台编码省力,字段少的话就写个存储过程,并套上事务。
#7
我之所以没在C1中增加一个"操作人"字段,是因为不但每次INSERT时要记录,而且以后所有发生的UPDATA也要记下来,所以单独做了一个B3表,专门记录所有的INSERT、UPDATA的操作日期和操作人。
#8
如果每一个用户都在sql sqlserver中有对应的用户,
操作人的姓名可以取:suser_sname()
如果所有的连接都用同一个用户,即所有人的suser_sname()相同,
只能在C1表增加操作人的姓名字段,客户端程序自行维护该字段的值
操作人的姓名可以取:suser_sname()
如果所有的连接都用同一个用户,即所有人的suser_sname()相同,
只能在C1表增加操作人的姓名字段,客户端程序自行维护该字段的值
#9
这本来就不是Sql解决的问题
在程序代码中去处理,这就是一个日志记录的问题
在程序代码中去处理,这就是一个日志记录的问题
#10
数据库操作日志!