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,有遇到同样问题的朋友交流下
  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/dajianshi/p/442069.html
Copyright © 2011-2022 走看看