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

相关推荐

  • Python自定义函数的实现和应用

    Python自定义函数的实现和应用Python作为一种高级编程语言,其自带的函数库已经十分强大,可以满足很多开发者的需求。不过在实际的程序开发中,我们常常需要自定义一些函数以满足我们的具体需求。本文将从以下几个方面来介绍Python自定义函数的实现和应用:

    2024-03-06
    41
  • Python工程师:解析tempstr

    Python工程师:解析tempstr作为一名Python工程师,我们时常需要处理大量的数据,其中常用的一种数据格式就是字符串。而在字符串处理中,使用正则表达式是一种非常高效和灵活的方式,而正则表达式的一个关键就是:解析字符串。在这篇文章中,我们将会介绍如何使用Python来解析字符串,并针对不同场景进行实例演示。

    2024-04-16
    27
  • 理解Spark运行模式(一)(Yarn Client)「建议收藏」

    理解Spark运行模式(一)(Yarn Client)「建议收藏」Spark运行模式有Local,STANDALONE,YARN,MESOS,KUBERNETES这5种,其中最为常见的是YARN运行模式,它又可分为Client模式和Cluster模式。这里以Spar

    2022-12-19
    97
  • 数栈SQL优化案例:OR条件优化

    数栈SQL优化案例:OR条件优化https://my.oschina.net/u/3869098/blog/5010642

    2023-04-12
    113
  • Python表达式编写流程

    Python表达式编写流程Python表达式是由一些数字、操作符、变量和函数等组合而成,通过计算并返回值。Python表达式语法简单,易于学习和使用。在Python中,可以使用表达式实现绝大部分的编程功能。

    2024-04-04
    27
  • 数据治理的王者——Apache Atlas「建议收藏」

    数据治理的王者——Apache Atlas「建议收藏」一、Atlas是什么? 在当今大数据的应用越来越广泛的情况下,数据治理一直是企业面临的巨大问题。 大部分公司只是单纯的对数据进行了处理,而数据的血缘,分类等等却很难实现,市场上也急需要一个专注于数据治

    2022-12-21
    99
  • kafka connector 使用总结以及自定义connector开发

    kafka connector 使用总结以及自定义connector开发Kafaka connect 是一种用于在Kafka和其他系统之间可扩展的、可靠的流式传输数据的工具。它使得能够快速定义将大量数据集合移入和移出Kafka的连接器变得简单。Kafka Connect可

    2022-12-21
    87
  • MySQL重置超级管理员密码「建议收藏」

    MySQL重置超级管理员密码「建议收藏」1. 修改数据库配置文件 vim /etc/my.cnf — 添加如下参数 skip_grant_tables 2. 重启数据库 /etc/init.d/mysqld restart 3. 登录数…

    2023-02-07
    98

发表回复

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