2017-03-04 4 views
0

Die folgende SELECT-Anweisung funktioniert gut.Verwendung von Select sub innerhalb UPDATE Abfrage

SELECT * 
FROM [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] A 
WHERE EXISTS (SELECT 1 
       FROM [BillingReferenceData].[dbo].[CLIMapping] B 
       WHERE A.CustomerCLI = B.CLI AND A.CustomerCLI = '84422881') 

Allerdings, wenn ich es in einer CASE-Anweisung wickeln, wie weiter unten

UPDATE [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] 
SET [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST].[CustomerCLI] = 

CASE WHEN 

SELECT * 
FROM [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] A 
WHERE EXISTS (SELECT 1 
       FROM [BillingReferenceData].[dbo].[CLIMapping] B 
       WHERE A.CustomerCLI = B.CLI AND A.CustomerCLI = '84422881'))>1 

THEN 'X' ELSE 'Y' END 

Es schlägt mit dem folgenden Fehler

„Nur ein Ausdruck in der Auswahlliste angegeben werden, wenn die Unterabfrage nicht eingeführt mit exists“

+0

Ich vermute, es sollte 'Select count (*)' ... Select * gibt eine Ergebnismenge zurück, und Sie versuchen, das mit einem skalaren Wert zu vergleichen ... –

Antwort

0

Verwendung "top 1"

UPDATE [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] 
SET [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST].[CustomerCLI] = 

CASE WHEN 

SELECT top 1 * 
FROM [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] A 
WHERE EXISTS (SELECT 1 
       FROM [BillingReferenceData].[dbo].[CLIMapping] B 
       WHERE A.CustomerCLI = B.CLI AND A.CustomerCLI = '84422881'))>1 

THEN 'X' ELSE 'Y' END 
0

Sie versuchen, eine CustomerCLI Nummer in [BillingReferenceData].[dbo].[CLIMapping] Tabelle zu finden und möchten mit X oder Y Werte in [VoiceflexBilling].[dbo].[FEBU17_OWH07579_Calls - TEST] Tabelle aktualisieren?

Sie müssen SELECT COUNT(1) innerhalb der CASE Anweisung verwenden.