想建一个自定义函数,跟据SPID返回当前用户所执行的SQL语句,基本如下CREATE FUNCTION ufn_GetUserExecSQL(@UserID int)
RETURNS Nvarchar(Max)
AS
BEGIN
DECLARE @UserExecSql Nvarchar(Max)
DECLARE @UserSql Table
(
[EventType] VARCHAR(100),
[Parameters] FLOAT,
[EventInfo] NVARCHAR(max)
)
INSERT INTO @UserSql([EventType],[Parameters],[EventInfo])
EXEC ('DBCC INPUTBUFFER('+@UserID+')') SELECT @UserExecSql=[EventInfo] FROM @UserSql
RETURN @UserExecSql
END
go创建时出现下面错误提示:
消息 443,级别 16,状态 14,过程 ufn_GetUserExecSQL,第 12 行
在函数内对带副作用的运算符 'INSERT EXEC' 的使用无效。高手帮想个法子如何解决,希望用函数,因为我想在SQL中调用,如:
SELECT dbo.ufn_GetUserExecSQL(spid),* FROM SYS.sysprocesses
WHERE SPID>50
RETURNS Nvarchar(Max)
AS
BEGIN
DECLARE @UserExecSql Nvarchar(Max)
DECLARE @UserSql Table
(
[EventType] VARCHAR(100),
[Parameters] FLOAT,
[EventInfo] NVARCHAR(max)
)
INSERT INTO @UserSql([EventType],[Parameters],[EventInfo])
EXEC ('DBCC INPUTBUFFER('+@UserID+')') SELECT @UserExecSql=[EventInfo] FROM @UserSql
RETURN @UserExecSql
END
go创建时出现下面错误提示:
消息 443,级别 16,状态 14,过程 ufn_GetUserExecSQL,第 12 行
在函数内对带副作用的运算符 'INSERT EXEC' 的使用无效。高手帮想个法子如何解决,希望用函数,因为我想在SQL中调用,如:
SELECT dbo.ufn_GetUserExecSQL(spid),* FROM SYS.sysprocesses
WHERE SPID>50
解决方案 »
- 求救:在WINDOWS XP上安装SQL Server 2000简体中文版遇到不可逆的错误!
- 高手帮忙写语句!!!急!!!
- 请问此问题SQL如何写????????????????
- 一个简单的SQL语句,关于null值的问题
- mysql数据库创建错误,希望尽快得到答复
- 求助:VISTA下安装MS SQL2005
- 我的机子不能从操作系统重新启动,还有关机.我该怎么办???
- begin tran再使用远程查询和BEGIN DISTRIBUTED TRANSACTION都是分布式事务吗?有什么区别?用OPENDATASOURCE('MSDASQL'和SQLOLEDB'区别?相
- **超级难题**,有一张表,我想转换为另外一种形式的表,该如何操作?请高手指点。急盼!
- 这种sq语句怎么写,尝试了一个上午都失败了,特来求助
- 【【谁能告诉我SQL中怎么按时间段求平均值】】
- 跪求数据库高手,用语法语句帮我写个考勤计算规则!谢谢
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT [Spid] = session_Id
, ecid
, [Database] = DB_NAME(sp.dbid)
, [User] = nt_username
, [Status] = er.status
, [Wait] = wait_type
, [Individual Query] = SUBSTRING (qt.text,
er.statement_start_offset/2,
(CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset END -
er.statement_start_offset)/2)
,[Parent Query] = qt.text
, Program = program_name
, Hostname
, nt_domain
, start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50 -- Ignore system spids.
AND session_Id NOT IN (@@SPID) ORDER BY 1, 2
END