Archive
Are User Defined Functions (UDF) pre-compiled – MSDN TSQL forum
–> Question:
I have seen several posts saying that a UDF is not pre-compiled like a stored procedure.
But this MSDN Page it says both are.
Could any one let me know which one is correct and what is meant by this?
–> My Answer:
UDF are not pre-compiled, UDFs similar to SPs are only compiled on their first execution. They are just parsed and created in SQL catalog.
Try to execute the DMV query before the SQL query where the function TsqlSplit() is called. It won’t give to you any cache’d record. But after you execute the SQL query and then execute the DMV query then you will see a cache’d record for Function execution.
Check this:
dbcc freeproccache GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[TsqlSplit] (@List As varchar(8000)) RETURNS @Items table ( Item varchar(8000) Not Null) AS BEGIN DECLARE @Item As varchar(8000), @Pos As int WHILE DATALENGTH(@List) > 0 BEGIN SET @Pos=CHARINDEX(',', @List) IF @Pos = 0 SET @Pos=DATALENGTH(@List) + 1 SET @Item = LTRIM(RTRIM(LEFT(@List, @Pos - 1))) IF @Item <> '' INSERT INTO @Items SELECT @Item SET @List=SUBSTRING(@List, @Pos + DATALENGTH(','), 8000) END RETURN END GO SELECT objtype, cacheobjtype, usecounts, text FROM sys.dm_exec_cached_plans AS ECP CROSS APPLY sys.dm_exec_sql_text(ECP.plan_handle) AS EST WHERE EST.text LIKE '%TsqlSplit%' GO SELECT * FROM [TsqlSplit] ('1,2,3') GO SELECT objtype, cacheobjtype, usecounts, text FROM sys.dm_exec_cached_plans AS ECP CROSS APPLY sys.dm_exec_sql_text(ECP.plan_handle) AS EST WHERE EST.text LIKE '%TsqlSplit%'
Ref Link.
Logging in SSIS… using SQL Server Log Provider
As per MS BOL SSIS provides a diverse set of log providers, and gives you the ability to create custom log providers. The Integration Services log providers can write log entries to text files, SQL Server Profiler, SQL Server, Windows Event Log, or XML files. This help in implementing logging in SSIS packages. With logging you can capture run-time information about a package, helping you audit and troubleshoot a package every time it is run.
Following are the different log providers:
1. Text File
2. SQL Server Profiler
3. SQL Server
4. Windows Event
5. XML File
Here we will see how can we use the SQL Server log provider (#3 above), which writes log entries to the sysssislog table in a SQL Server database.
Please note in 2005 the logs are stored in sysdtslog90 table. In 2008 the table name is changed to sysssislog.
Following are the easy steps one can follow to configure logging:
1. Create a SSIS package, as shown below are the 2 Execute SQL tasks. To enable logging goto menu, select SSIS-> Logging…
2. On this new window select the Provider Type as “SSIS log provider for SQL Server”, click Add.
3. The log provider will be added, select by checking the check box. Now provide the connection where the log table should get created.
4. Switch to the Details tab and select the events you want to log and audit. Click OK, save your SSIS package and your logging is enabled.
5. After this run your package and switch to SSMS and check on object explorer that the table sysdtslog90 has been created on the database you added as a connection. Now you can query the sysdtslog90 table where the logs are stored.
select * from FROM [AdventureWorks].[dbo].[sysdtslog90]
The sysdtslog90 table contains following columns listed in the query below. All are self explanatory, one can also check the links at the end of the post to get more info about them.
SELECT [id], [event], [computer], [operator], , --,[sourceid], [executionid], [starttime],[endtime],[datacode], [databytes], [message] FROM [AdventureWorks].[dbo].[sysdtslog90]
>> Check & Subscribe my [YouTube videos] on SQL Server.