SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)[亲测有效]

SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)[亲测有效]在SQL Server中,普通的表值函数(table-valued function)是可以使用表提示(Hints-Table)的,那么CLR类型的表值函数(table-valued function

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;

代码100分

代码100分GO

SELECT  *

代码100分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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7992.html

(0)
上一篇 2023-03-09
下一篇 2023-03-09

相关推荐

  • mysql中key 、primary key 、unique key 与index区别【转】

    mysql中key 、primary key 、unique key 与index区别【转】一、key与primary key区别 解析: KEY wh_logrecord_user_name (user_name) 本表的 字段与 表`user_name`字段建立外键 括号外是建立外键的对

    2023-02-16
    155
  • Python Keys:优雅的字典键值

    Python Keys:优雅的字典键值在Python中,字典(dictionary)是一种非常常用且方便的数据结构,它由一系列的键(key)和对应的值(value)组成。在编写代码时,我们常常需要从字典中选取特定的键或对字典进行操作。Python的字典键值相关的语法和方法提供了一些非常优雅的操作方式,本文将从多个方面进行详细阐述。

    2024-02-15
    115
  • 从库 MTS 多线程并行回放(二)[亲测有效]

    从库 MTS 多线程并行回放(二)[亲测有效]本文作者:高鹏,欢迎订阅他的简书专栏 本节包含一个笔记,链接如下: https://www.jianshu.com/p/e920a6d33005 这一节会先描述 MTS 的工作线程执行 Event …

    2023-02-03
    121
  • 基于oracle的sql优化如何_oracle数据库物理结构

    基于oracle的sql优化如何_oracle数据库物理结构 Oracle结构; 主要包括两部分:1.Oracle实例 2.数据库文件 Orac le 实例: 1.是访问 Oracle database 的途径 2.只能打开一个数据库 3.由 SGA …

    2023-03-19
    150
  • python获取当前进程id(获取当前进程的所有线程)

    python获取当前进程id(获取当前进程的所有线程)#-*- encoding:UTF-8 -*-

    2023-11-22
    124
  • Python键值对的基本操作

    Python键值对的基本操作在Python编程中,键值对(key-value pairs)是一种常见的数据结构,它是由一个键(key)和一个与之相关联的值(value)组成的。Python内置的数据类型dict是基于键值对实现的,它可以轻松存储和操作数据,是Python编程中不可或缺的一部分。

    2024-05-18
    65
  • Python查看包版本方法总结

    Python查看包版本方法总结在Python开发中,我们常常需要查询指定包的版本信息,以便保证程序的正常运行并及时更新维护。Python提供了多种查询包版本信息的方法,本文旨在总结这些方法,帮助初学者更好地处理包的版本问题。

    2024-05-09
    73
  • 数据库的维护「终于解决」

    数据库的维护「终于解决」事务 数据库并发控制的对象 事务是数据库的逻辑工作单位 序列中的操作要么全做,要么全不做 特性; 原子性 一个事务中的所有操作是不可分割的,要么全部执行,要么 全部不执行,这就是事务的原子性。 一致性

    2023-03-04
    151

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注