返回顶部
首页 > 资讯 > 数据库 >SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)
  • 170
分享到

SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)

摘要

在SQL Server中,普通的表值函数(table-valued function)是可以使用表提示(Hints-Table)的,那么CLR类型的表值函数(table-valued function)是否也可以使用表提示(Hin

SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)

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 FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATA",
                                   "*.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.

 

 

clip_image001

 

 

下面我创建了一个视图,如下所示:

 

 
CREATE VIEW yUtl.v_test
AS
    SELECT  *
    FROM    [yUtl].[clr_GetFolderList]("C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATA",
                                       "*.mdf")
 
 
 
 
SELECT * FROM yUtl.v_test WITH(NOLOCK);

 

 

 

clip_image002

 

Msg 4139, Level 16, State 1, Line 52

Cannot process the query because it references the common language runtime (CLR) table-valued function "yUtl.clr_GetFolderList" with a hint through view "yUtl.v_test".

 

 

 

其实这个是因为视图对象使用了WITHNOLOCK)的话,就会自动转换为给视图内部对象加上WITH(NOLOCK),那么就会出现上面的错误,如果像存储过程里面调用了这样的视图,就会出现下面这样的错误信息

 

 

Cannot process the query because it references the common language runtime (CLR) table-valued function "xxxx" with a hint through view "xxxx".

 

但是有点奇怪的是官方资料上并没有详细说明CLR表值函数不能使用WITH(NLOCK)等表提示,不清楚是文档不够完善,还是忽略了这些细节。个人倒是第一次遇到这种错误,特此记录一下这个问题。

 

 

参考资料:

 

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-function-transact-sql?view=sql-server-ver15

Https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver15

您可能感兴趣的文档:

--结束END--

本文标题: SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)

本文链接: https://lsjlt.com/news/6575.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作