0

我的 SQL Server 2008 R2 上有 2 个数据库(X 和 Y)。由于某种原因,数据库和服务器具有不同的编码(SQL_Latin1_general_CP1_CI_ASLatin1_General_CI_AS),所以当我使用临时表或表变量时,我总是面临整理问题。

从数据库 Y 中选择一些信息到表变量中@info

当我尝试以这种方式加入两者时,它工作得非常好:

select d.data_id, i.info_id, i.info_value
from X.aaa.data d
    join @info i on i.serial COLLATE DATABASE_DEFAULT =
        SUBSTRING(d.serial, 17, 10) COLLATE DATABASE_DEFAULT

但是不同产品的序列长度可能不同,所以我想用一个变量来做:

declare @serial_length int = 10;

-- some switch case to set @serial_length to some other value

select d.data_id, i.info_id, i.info_value
from X.aaa.data d
    join @info i on i.serial COLLATE DATABASE_DEFAULT =
        SUBSTRING(d.serial, 17, @serial_length) COLLATE DATABASE_DEFAULT

当我尝试这个时,查询将永远运行并且什么都不做。

有解决此问题的方法吗?或者至少有人知道为什么会这样吗?

更新:感谢MitchWheat,整理不再是问题更改数据库整理和处理 TempDB 对象

但是SELECT还是不行。我SUBSTRING(serial, 17, @serial_length)也在另一个过程中使用,但没有表变量,它在那里工作。

4

0 回答 0