在执行SELECT INTO时,我可以指定排序规则吗?

6
如果我从一个源选择到另一个源,我能同时指定排序规则吗?
例如:
SELECT Column1, Column2
INTO DestinationTable
FROM SourceTable

当“DestinationTable”不存在时。

我知道我可以这样做:

SELECT Column1, Column2 COLLATE Latin1_General_CI_AS
INTO DestinationTable
FROM SourceTable

在我的实际问题中,列的数据类型事先是未知的,因此我不能仅仅为每个列添加排序规则。它位于一个使用大型恶劣存储过程生成SQL的遗留应用程序的角落里,我正在尝试在具有不同临时数据库排序规则的新服务器上使其正常运行,并最小化更改。
我正在寻找类似于以下内容的解决方案:
SELECT Column1, Column2
INTO DestinationTable COLLATE Latin1_General_CI_AS
FROM SourceTable

但那样做是行不通的。

3个回答

3

你能先创建表吗?

你可以为相关列定义排序规则。在插入时,它们将被强制转换。

但如果你不知道目标表的结构,那么就不能做到这点,除非使用动态SQL。这会使情况变得更糟...


好的,谢谢你确认了我的想法。有数百个这些存储过程,其中许多正在生成动态SQL,因此尽管我可以修改它们,但除非我绝对没有选择,否则我不会走这条路 - 看起来我必须看看是否可以安排更改排序规则以匹配临时gak :-( - FinnNk
你如何设置表格排序规则? - Ian Thompson
@IanThompson:我太懒了,措辞不精。我的意思是“先为列定义排序规则”。 - gbn
没关系。我正在寻找一种快速设置表排序规则的方法,但不幸的是必须为每个列单独设置。 - Ian Thompson

1

更正Kasia的答案:

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

为了让它工作,你必须为每个列添加别名。


1
你可以这样做,如果有帮助的话:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接