RASSEMBLER DATABASE_DEFAULT agaisnt un () de la clause
J'ai un problème de retour des dossiers dans une procédure stockée. Aucune erreur n'est levée, mais je pense que des données provenant d'un environnement de serveur n'est pas en mélangeant bien dans un autre.
set @shipedon = YEAR(@shipdate) * 10000 + MONTH(@shipdate) * 100 + DAY(@shipdate)
Cela fonctionne:
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
montre 8 lignes comme:
391000180 0001
391000189 0001
391000191 0001
D'échec:
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)
OriginalL'auteur SteveO | 2014-02-20
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin de concaténer tous dans une chaîne délimitée par des virgules.
IN
accepte une sous-requête qui ne retourne qu'une seule colonne, des éléments à tester. Utilisez simplementAussi, pas besoin d'
RTRIM
que les espaces ne sont pas importants, dans une comparaison et siItemNumber
est numérique, vous devez utiliser un type de données numérique, pas une chaîne de caractères.OriginalL'auteur Martin Smith
Il n'est pas judicieux d'utiliser @items de la variable dans la clause. Elle traite cette variable comme une chaîne de caractères. Donc, sauf si c'est juste une seule valeur, il ne fonctionnera pas comme vous le pensez.
Le moyen pour résoudre ce problème est de mettre tous les Id dont vous avez besoin dans une autre table temp et ensuite se joindre à votre requête avec cette table temp.
OriginalL'auteur