我的 SQL Server 2008 R2 上有 2 个数据库(X 和 Y)。由于某种原因,数据库和服务器具有不同的编码(SQL_Latin1_general_CP1_CI_AS
和Latin1_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)
也在另一个过程中使用,但没有表变量,它在那里工作。