Ste*_*veO 10 t-sql sql-server collation
我在sproc中返回记录时遇到问题.没有抛出错误,但我认为来自一个服务器环境的数据在另一个服务器环境中混合不好.
set @shipedon = YEAR(@shipdate) * 10000 + MONTH(@shipdate) * 100 + DAY(@shipdate)
Run Code Online (Sandbox Code Playgroud)
这有效:
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
Run Code Online (Sandbox Code Playgroud)
显示8行,如:
391000180 0001
391000189 0001
391000191 0001
Run Code Online (Sandbox Code Playgroud)
这失败了:
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)
Run Code Online (Sandbox Code Playgroud)
不需要将它们全部连接成逗号分隔的字符串.
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
Run Code Online (Sandbox Code Playgroud)
也不需要RTRIM在比较中作为尾随空格不重要,如果ItemNumber是数字,则应使用numeric数据类型,而不是字符串.
| 归档时间: |
|
| 查看次数: |
64003 次 |
| 最近记录: |