我在返回存储过程中的记录时遇到问题。没有抛出错误,但我认为来自一个服务器环境的数据在另一个服务器环境中混合得不好。
set @shipedon = YEAR(@shipdate) * 10000 + MONTH(@shipdate) * 100 + DAY(@shipdate)
这有效:
SELECT [ITEM_KEY],
max([REVISION]) Rev
FROM SERVER2.[BOMSystem].[dbo].[ITEM]
WHERE ITEM_KEY collate DATABASE_DEFAULT in
('391000180', '391000189', '391000191', '391000201',
'391000214', '391000215', '391000216', '391000226')
AND DATE_EFF_FROM <= @shipedon
GROUP BY ITEM_KEY
显示 8 行,例如:
391000180 0001
391000189 0001
391000191 0001
这失败了:
SELECT [ITEM_KEY],
max([REVISION]) Rev
INTO #rev
FROM SERVER2.[BOMSystem].[dbo].[ITEM]
WHERE ITEM_KEY collate DATABASE_DEFAULT in (@items)
AND DATE_EFF_FROM <= @shipedon
GROUP BY ITEM_KEY
SELECT * from #rev shows no results.
SELECT @items = SUBSTRING(
(SELECT distinct ',' +''''+ ltrim(rtrim(ItemNumber )) +''''
collate DATABASE_DEFAULT
FROM #ShipTemp
FOR XML PATH('')),2,20000)
最佳答案
无需将它们全部连接成逗号分隔的字符串。
IN
接受返回要测试的单列项目的子查询。只需使用
SELECT [ITEM_KEY],
max([REVISION]) Rev
INTO #rev
FROM SERVER2.[BOMSystem].[dbo].[ITEM]
WHERE ITEM_KEY COLLATE DATABASE_DEFAULT IN (SELECT LTRIM(ItemNumber )
FROM #ShipTemp)
AND DATE_EFF_FROM <= @shipedon
GROUP BY ITEM_KEY
也不需要RTRIM
,因为尾随空格在比较中并不重要,如果ItemNumber
是数字,则应该使用数字数据类型,而不是字符串。
关于sql-server - 针对 IN () 子句 COLLATE DATABASE_DEFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911390/