【问题标题】:Can I specify the collation when performing a SELECT INTO我可以在执行 SELECT INTO 时指定排序规则吗
【发布时间】:2011-12-02 19:36:28
【问题描述】:

如果我从一个来源选择到另一个来源,我可以同时指定排序规则。

例如

SELECT Column1, Column2
INTO DestinationTable
FROM SourceTable

“DestinationTable”尚不存在。

我知道我可以做类似的事情

SELECT Column1, Column2 COLLATE Latin1_General_CI_AS
INTO DestinationTable
FROM SourceTable

在我的实际问题中,列的数据类型事先并不知道,所以我不能只将排序规则添加到每一列。它位于遗留应​​用程序的一个角落,它使用生成 SQL 的大型讨厌的存储过程,我正试图让它在一个新的服务器上工作,该服务器在 tempdb 中具有不同的排序规则,并且更改很少。

我正在寻找类似的东西:

SELECT Column1, Column2
INTO DestinationTable COLLATE Latin1_General_CI_AS
FROM SourceTable

但这不起作用。

【问题讨论】:

    标签: tsql collation


    【解决方案1】:

    可以先建表吗?

    您可以为相关列定义排序规则。在 INSERT 时,它们将被强制执行。

    听起来你不知道目标表的结构......所以不,你不能没有动态 SQL。这会让事情变得更糟......

    【讨论】:

    • 好的 - 谢谢你,它证实了我的想法。有数百个这样的 SP,其中许多正在生成动态 SQL,所以虽然我可以修改它的路线,但我不打算走下去,除非我绝对别无选择 - 看起来我必须看看我们是否可以安排更改排序规则以匹配温度。 gak :-(
    • 如何设置表格排序规则?
    • @IanThompson:我很懒惰而且不精确。我的意思是“首先为列定义排序规则”
    • 没关系。我一直在寻找一种在表格上设置排序规则的快速方法,不幸的是,它必须对每一列都进行。
    【解决方案2】:

    如果有帮助,您可以这样做:

    SELECT *
    INTO DestinationTable
    FROM
    (
    SELECT Column1  COLLATE Latin1_General_CI_AS, Column2  COLLATE Latin1_General_CI_AS
    FROM SourceTable
    ) as t
    

    【讨论】:

      【解决方案3】:

      纠正卡西亚的回答:

      SELECT *
      INTO DestinationTable
      FROM
      (
      SELECT Column1  COLLATE Latin1_General_CI_AS as Column1
             ,Column2  COLLATE Latin1_General_CI_AS as Column1
      FROM SourceTable
      ) as t
      

      您必须为每列添加一个别名才能完成这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 2018-02-21
        • 2012-03-28
        • 2014-02-02
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多