zoukankan      html  css  js  c++  java
  • MS_SQL_杂记(一)

        最近一段时间项目转入SSIS,从DB2和TeraData向MSSql中迁入,其中又穿插了perl一些的知识,感觉这段时间相当的充实,以前一直关注C#,javascript,不怎么写sql,现在一天写一两千行的sql,脸不红,气不喘,一口气连上八楼都不心跳加速了.

        因为一些知识只是临时性的添加,所以显得很杂乱.

        (1)sql datatime 格式化

    1. Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM  
    2. Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06  
    3. Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16  
    4. Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06  
    5. Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06  
    6. Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06  
    7. Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06  
    8. Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06  
    9. Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46  
    10. Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM  
    11. Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06  
    12. Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16  
    13. Select CONVERT(varchar(100), GETDATE(), 12): 060516  
    14. Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937  
    15. Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967  
    16. Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47  
    17. Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157  
    18. Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM  
    19. Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16  
    20. Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47  
    21. Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250  
    22. Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM  
    23. Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006  
    24. Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16  
    25. Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006  
    26. Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006  
    27. Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006  
    28. Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006  
    29. Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006  
    30. Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49  
    31. Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM  
    32. Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006  
    33. Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16  
    34. Select CONVERT(varchar(100), GETDATE(), 112): 20060516  
    35. Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513  
    36. Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547  
    37. Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49  
    38. Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700  
    39. Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827  
    40. Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM  
    41. Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM 

      (2) openquery的使用

           

        OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源。而其他数据库在OpenQuery 表达式中是以Linked Server 存在的。 使用sp_linkedservers 可以找到当前数据库的所有linked server. OpenQuery的表达式可以这么写:

    Select * from OpenQuery[linkedServerName],'Select * from T_test where id > 10')

        但是如果要传递参数呢?那只能老办法,将整体做成一个字符串,然后在调用存储过程了

    create proc Sp_GetDb2 
    (
    @ExecuteTime datetime = getdate()
    )
    as
    begin
      declare @ExecuteTime datetime = getdate()
      declare @sqlhead varchar(2012) = ''
      set @sqlhead = 'select * from openquery(db2_test,''select * from t_test where ctime > '
                  + Convert(varchar(10),@ExecuteTime,112)+ ''')'
      exec(@sqlhead)          
    end

    (3)跨数据库联合更新问题

        

    1.跨数据库联合更新问题

    Sql语句:

    Update T_local  set T_local.id = T2.id

    From t_local T1,

    (

    Select * from openquery(TRD,’select * from t_test’) 

    ) T2

    Where T2.name = T1.name 

    Error:cannot resolve the collation conflict between "chinese_prc_ci_as" and "Chinese_Taiwan_Stroke_CI_AS_WS" in the equal to operation

     

    附录:

    在执行SQL语句时,可能会遇到:无法解决 equal to 操作中的 **** 和 *******排序规则冲突

    .错误分析:
      这个错误是因为排序规则不一致造成的,我们做个测试,比如:
    create table #t1(
    name varchar(20) collate Albanian_CI_AI_WS, 
    value int)

    create table #t2(
    name varchar(20) collate Chinese_PRC_CI_AI_WS,   
    value int

    表建好后,执行连接查询:

    select * from #t1 A inner join #t2 B on A.name=B.name

    这样,错误就出现了:

               服务器消息 446,级别 16,状态 9,行 1
               无法解决 equal to 操作的排序规则冲突。
      要排除这个错误,最简单方法是,表连接时指定它的排序规则,这样错误就
    不再出现了。语句这样写:

    select *
    from #t1 A inner join #t2 B
    on A.name=B.name collate Chinese_PRC_CI_AI_WS


    .排序规则简介:

        什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中,
    字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存
    储和比较字符所使用的规则。"
      在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。

        select * from ::fn_helpcollations()

    排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
    如:
      Chinese_PRC_CS_AI_WS
    前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
    排序规则的后半部份即后缀 含义:
      _BIN 二进制排序
      _CI(CS) 是否区分大小写,CI不区分,CS区分
      _AI(AS) 是否区分重音,AI不区分,AS区分   
      _KI(KS) 是否区分假名类型,KI不区分,KS区分 
        _WI(WS) 是否区分宽度 WI不区分,WS区分 

    区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
    区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
             比较还将重音不同的字母视为不等。
    区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
    区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项


    三、解决方法

    1.将数据库中一个表的字段改成与另一个表中要比较的字段相同的排序规则。

    2.SQL语句的Where子句后面加上类似这样的SQL片段:collate Chinese_PRC_CI_AI_WS

        如:

    Select A.* From A,B Where A.a = B.b collate Chinese_PRC_CI_AI_WS

     

    解决方法:

    Update T_local  set T_local.id = T2.id

    From t_local T1,

    (

    Select * from openquery(TRD,’select * from t_test’) 

    ) T2

    Where T2.name = T1.name collate Chinese_PRC_CI_AS

  • 相关阅读:
    财务报表分析(张新民教授)-第五章 企业报表战略分析(1):资源配置战略(续)
    财务报表分析(张新民教授)-第五章 企业报表战略分析(1):资源配置战略
    财务报表分析(张新民教授)-第四章 企业经营活动与财务报表的关系
    以商品为生25:交易商品价差
    以商品为生22:页岩油与水力压裂的优缺点
    以商品为生17:石油价格历史——自1974年以来的高点和低点
    以商品为生15:商品交易中的Backwardation和Contango
    以商品为生14:大宗商品投资者的大豆交易指南
    以商品为生11:来自USDA的月度WASDE报告
    AJAX 跨域请求
  • 原文地址:https://www.cnblogs.com/codefish/p/2972156.html
Copyright © 2011-2022 走看看