首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式转换- SQL

隐式转换- SQL
EN

Stack Overflow用户
提问于 2021-03-08 07:22:59
回答 2查看 242关注 0票数 0

我有下面的SQL查询

代码语言:javascript
复制
DECLARE @table table(dbname sysname)

INSERT INTO @table(dbname)
SELECT NAME FROM sys.databases where name like '%AccountsLive'

DECLARE @Sql NVARCHAR(MAX) = NULL;

SELECT  @Sql = COALESCE(@Sql + ' UNION ALL ' + CHAR(13) + CHAR(10), '' ) +
'SELECT ST_ALOC_POINTER, ST_TRANTYPE, ST_HEADER_REF, ST_GROSS , ST_CURRENCYCODE , ST_CURR_VALU , ST_DESCRIPTION FROM ' 
+ QUOTENAME(dbname) + '.dbo.SL_TRANSACTIONS
WHERE ST_YEAR = ''N''
and ST_PERIODNUMBER = ''1''
and ST_ALOC_POINTER like ''%LC%''
and ST_GROSS <> ''0''
UNION ALL
SELECT ST_ALOC_POINTER, ST_TRANTYPE, ST_HEADER_REF, ST_GROSS , ST_CURRENCYCODE , ST_CURR_VALU , ST_DESCRIPTION FROM ' 
+ QUOTENAME(dbname) + '.dbo.SL_TRANSACTIONS
WHERE ST_YEAR = ''N''
and ST_PERIODNUMBER = ''1''
and ST_ALOC_POINTER like ''%CR%''
and ST_GROSS <> ''0'''
FROM    @table

EXEC( @Sql );

但是,我得到了一个隐式转换错误,如下所示:

无法执行varchar值到varchar的

隐式转换,因为UNION运算符中的"SQL_Latin1_General_CP1_CI_AS“和"Latin1_General_CI_AS”之间的排序冲突未解决。

有人知道这是什么或者如何修复我的查询吗?提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-08 07:53:28

该错误涉及表和sys.databases表上的不同排序规则,您应该在select语句中使用显式排序规则(问题是dbname),只需更改这一行:

代码语言:javascript
复制
SELECT NAME COLLATE Latin1_General_CI_AS FROM sys.databases where name like '%AccountsLive'

并将您的@table更改为:

代码语言:javascript
复制
DECLARE @table table(dbname sysname COLLATE Latin1_General_CI_AS)

如果不能解决问题,请也使用以下方法:

代码语言:javascript
复制
... QUOTENAME(dbname) COLLATE Latin1_General_CI_AS ... 
票数 1
EN

Stack Overflow用户

发布于 2021-03-08 07:48:22

当我们将UNION跨多个数据库时,我们将得到排序规则错误,因为数据库表中的列之间存在排序规则冲突。

为了避免这种情况,我们可以修改查询,如下所示,针对有问题的特定列。

我们不需要对每个专栏都这么做。但是,由于我不知道哪一列有此问题,我将把所有的列放在查询中。

代码语言:javascript
复制
SELECT  @Sql = COALESCE(@Sql + ' UNION ALL ' + CHAR(13) + CHAR(10), '' ) +
'SELECT ST_ALOC_POINTER COLLATE DATABASE_DEFAULT, ST_TRANTYPE COLLATE DATABASE_DEFAULT,
 ST_HEADER_REF COLLATE DATABASE_DEFAULT, ST_GROSS COLLATE DATABASE_DEFAULT, 
ST_CURRENCYCODE COLLATE DATABASE_DEFAULT, ST_CURR_VALU COLLATE DATABASE_DEFAULT, 
ST_DESCRIPTION COLLATE DATABASE_DEFAULT FROM ' 
+ QUOTENAME(dbname) + '.dbo.SL_TRANSACTIONS
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66525713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档