Re: Logging within User_Defined Functions (UDF)
From: Aaron Bertrand - MVP (aaron_at_TRASHaspfaq.com)
Date: 05/21/04
- Next message: Lloyd Sheen: "Re: How to emulate dbconvert in ADO.NET"
- Previous message: Caspy: "Re: keep the new line character in SQL server text"
- In reply to: Rob: "Logging within User_Defined Functions (UDF)"
- Next in thread: Rob: "Re: Logging within User_Defined Functions (UDF)"
- Reply: Rob: "Re: Logging within User_Defined Functions (UDF)"
- Messages sorted by: [ date ] [ thread ]
Date: Fri, 21 May 2004 10:51:18 -0400
You can't perform dynamic SQL or DML (INSERT, UPDATE, DELETE) in a function.
See Books Online for some of the rules governing the use of functions and
limitations on what you can do inside of them...
Why is this a function anyway? Looks like a stored procedure that you
accidentally typed "CREATE FUNCTION"...
-- Aaron Bertrand SQL Server MVP http://www.aspfaq.com/ "Rob" <anonymous@discussions.microsoft.com> wrote in message news:103ab01c43f3e$a2fbf500$a401280a@phx.gbl... > Hi > > I'm trying to carry out some logging each time an UDF > executes.However I understand there are some limitations, > i.e you cannot INSERT data into tables directly from > within a function. Ultimately you can only execute > functions and extended procedures within a function. > > So i've tried to use the xp_execresultset xp to insert the > appropriate logging information into a table. using this > xp by itself and not in a function works fine, but as soon > as I copy this bit of code to a normal function, i.e not a > table function, i still get error : > > Server: Msg 557, Level 16, State 2, Procedure zzz_Rob, > Line 13 > Only functions and extended stored procedures can be > executed from within a function. > > Why?!!!! > > I know that my last resort would be to use xp_cmdshell and > run an osql statement but that would mean giving users > access to xp_cmdshell which I dont want to do > > I really just need to know whether I am barking up the > wrong tree here. please tell me if I simply cannot do what > i want to do. Strange this is that it compiles, just wont > let me execute > > Many thanks in advance > Rob > > PS: here is a scaled down version of what I want to do but > it gives you an idea... > > CREATE FUNCTION dbo.zzz_Rob (@udt nvarchar(4000)) > RETURNS int > AS > BEGIN > DECLARE @cmdstr nvarchar(500) > DECLARE @db nvarchar(50) > > SELECT @db = convert(nvarchar(50),db_name()) > > SELECT @cmdstr = 'SELECT ' + '''' + 'SET NO COUNT > ON INSERT EDM..t_ADM_TickerObjectLog(UserName) VALUES(' > + '''' + '''' + convert(nvarchar,user_name > ()) + '''' + '''' + ')' + '''' > > EXEC master..xp_execresultset @cmdstr,@db > > RETURN 0 > > END > >
- Next message: Lloyd Sheen: "Re: How to emulate dbconvert in ADO.NET"
- Previous message: Caspy: "Re: keep the new line character in SQL server text"
- In reply to: Rob: "Logging within User_Defined Functions (UDF)"
- Next in thread: Rob: "Re: Logging within User_Defined Functions (UDF)"
- Reply: Rob: "Re: Logging within User_Defined Functions (UDF)"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|