zoukankan      html  css  js  c++  java
  • 发现一个问题,可能是Sql Express 2005的Bug

        在我写的一个存储过程中,为了利用数据库中保存的表和字段的说明这个扩展属性(MS_description),使用到了fn_listextendedproperty这个系统函数(说到这个函数,先鄙视下微软,这个属性竟然需要使用这么麻烦的一个函数,为什么不用一个存储过程,为了使用这个函数,当时着实的费了半天劲,特别是提取列的注释的时候,必须要指定表的名字,无奈只好写个SP,本来想使用Sql解决的),其中一条语句如下:
     update ts_tables set tname=convert(varchar,c.value) from 
        (
    select * from ::fn_listextendedproperty('MS_Description','user','dbo','table',default,default,default)) c
        
    where tid=c.objname;

    在Sql2000中一直是这样使用的没有发现问题。可是最近放到Sql Express2005中运行,确发生了如下错误:
    Msg 468Level 16, State 9, Line 1
    Cannot resolve the collation conflict 
    between "Latin1_General_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation.
    调试了半天才定位到是这条语句引发的错误,google了一下,发现有人说是系统数据库和用户数据库的语言不一样造成的,可是我查看了一下好像不是这方面的问题!在Sql Express中所有库的语言代码都是这个Chinese_PRC_CI_AS 经过一段的查找学习,终于找到了一个解决方法!在语句中使用COLLATE指定语言,语句改为下面这个样子,运行通过了:
    update ts_tables set tname=convert(varchar,c.value) from 
        (
    select * from ::fn_listextendedproperty('MS_Description','user','dbo','table',default,default,default)) c
        
    where tid=c.objname COLLATE Chinese_PRC_CI_AS;
    不知道这是不是Sql Express2005的一个Bug,有遇到同样问题的朋友交流下
  • 相关阅读:
    理解Web路由(浅谈前后端路由与前后端渲染)
    JavaEE开发之SpringMVC中的路由配置及参数传递详解
    Vue2.0 render: h => h(App)的解释
    vue data不可以使用箭头函数的问题解析
    9、响应式数据原理
    项目中的问题
    7-42 整型关键字的散列映射 (25分)
    7-43 字符串关键字的散列映射 (25分)
    7-45 航空公司VIP客户查询 (25分)
    7-44 基于词频的文件相似度 (30分)
  • 原文地址:https://www.cnblogs.com/dajianshi/p/442069.html
Copyright © 2011-2022 走看看