在SQL Server中,普通的表值函数(table-valued function)是可以使用表提示(Hints-Table)的,那么CLR类型的表值函数(table-valued function)是否也可以使用表提示(Hints-Table)呢? 相信很多人都没有留意过这个问题。
下面我以YourSQLDba中现成的CLR表值函数来演示一下这个问题。如果自己手头有自定义CLR表值函数的,也可以构造自己的实验,查看CLR表值函数可以使用下面SQL
SELECT * FROM sys.objects WHERE type='FT'
如下所示,CLR表值函数是不能使用WITH(NOLOCK)的。它会提示语法错误。
USE YourSQLDba;
GO
SELECT *
FROM [yUtl].[clr_GetFolderList]('C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA',
'*.mdf') WITH(NOLOCK)
Msg 319, Level 15, State 1, Line 43
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.