在我的SQL中,我需要比较SQLServer 2008R2中两个表之间的数据,以返回存在不匹配的行(使用EXCEPT
),同样在其他情况下匹配行(INTERSECT
)。问题是,某些列具有NTEXT
数据类型(SQLServer),并且当存在具有NTEXT
列的此类表时,SQLServer会出错。
示例:
SELECT * FROM table_pre
EXCEPT
SELECT * FROM table_post
上述操作会出错 -
'The ntext data type cannot be selected as DISTINCT because it is not comparable.'
我认为表格(table_pre
,table_post
)至少有一列数据类型= NTEXT
导致比较失败。
问题 -
1.有没有办法从上面的比较中排除这些NTEXT
列,而我不必明确列出列名并排除问题列?涉及大量列,明确列出并不容易。
2.我是否可以单独明确地转换/转换NTEXT
列以表示VARCHAR
,并且仍然不必列出其余列?
3.或者,一般来说,我可以通过在这种比较中列出那些列来某种方式排除某些列吗?
任何建议,真的很感激!感谢。
答案 0 :(得分:1)
问题 - 1.是否有某种方法可以从上述比较中排除这些NTEXT列,
是的,明确使用列名。
没有我必须明确列出列名并排除问题列?
使用*是一个坏习惯,你滥用它就应该得到错误。
涉及大量列并且明确列出并不容易
实际上是微不足道的,建立dinamycally语句
我是否可以单独显式转换/转换NTEXT列以表示VARCHAR
没有。您必须转换为NVARCHAR,N 非常重要。但是,是的,你可以转换。
- 或者,一般情况下,我可以通过在比较期间列出某些列来排除某些列
醇>
幸运的是没有。 SQL不会随机决定哪些列是或不是结果的一部分,因此您可以获得所需的可预测性。
所以,在结论中:
*