2016-04-14 12 views
0

Ich versuche, loszuwerden, alle die CPAC_FR zu erhalten, wie gezeigt, ist unterDer Versuch, Daten aus einer Spalte zu entfernen

Facility Response CPAC_FR Transfer Call  2016-03-07   1 
Facility Response CPAC_FR Fulfillment-Email 2016-03-04 4 
Facility Response CPAC_FR Fulfillment-Email 2016-03-10 1 
Facility Response CPAC_FR Fulfillment-Email 2016-03-17 2 
Facility Response CPAC_FR Fulfillment-Email 2016-03-21 2 

Hier mein Code. Ich lerne immer noch, wie man eine Abfrage schreibt, damit ich immer wieder an Dingen festhalte.

SELECT SR_AREA, INS_PRODUCT, RESOLUTION_CD, CAST(CREATED AS DATE) AS DATEADD 
     , COUNT(*) AS TOTAL 
FROM S_SRV_REQ WITH (NOLOCK)   
WHERE (dbo.fn_dstoffset(CREATED) >= '3-1-2016') 
AND (dbo.fn_dstoffset(CREATED) <= DATEADD(D, 1, '3-31-2016')) 
AND [SR_AREA] IS NOT NULL 
GROUP BY INS_PRODUCT, RESOLUTION_CD, SR_AREA, CAST(CREATED AS DATE) 
ORDER BY SR_AREA,INS_PRODUCT,RESOLUTION_CD DESC 

Ich bin Neigung in mehr Hinzufügen eines DELETE FROM .. WHERE ..

Ich bin mit Microsoft SQL Server Management Studio.

+0

Willkommen bei stackoverflow. Bitte lesen [fragen]. –

+4

Da Sie noch lernen, ist es vielleicht nicht zu spät, Sie davon zu überzeugen, Ihre Anfragen mit diesem NOLOCK-Hinweis zu streichen. Es sei denn, du magst Ergebnisse, die meistens korrekt und meist genau sind. Wenn Sie gelegentlich doppelte und/oder fehlende Zeilen nicht erhalten möchten, sollten Sie diesen Hinweis nicht verwenden. Es gibt eine ganze Reihe anderer Fallen, die NOLOCK benutzen, von denen die meisten Leute nichts wissen. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

Antwort

1

Wenn mit einer einzigen Tabelle arbeiten - Sobald Sie Ihre SELECT Aussage haben nur die Daten, die Sie tatsächlich wollen Rückkehr löschen Sie dann die 'SELECT mit DELETE ersetzen können und die Klauseln GROUP BY und ORDER BY entfernen. In Ihrem Beispiel würden Sie sich mit diesem Zweck:

DELETE 
FROM S_SRV_REQ 
WHERE (dbo.fn_dstoffset(CREATED) >= '3-1-2016') 
AND (dbo.fn_dstoffset(CREATED) <= DATEADD(D, 1, '3-31-2016')) 
AND [SR_AREA] IS NOT NULL 

Side Hinweise:

  • Nehmen FK Einschränkungen in Betracht zieht, könnte die Aktualisierung wegen einer Einschränkung fehlschlagen oder möglicherweise Zwangs Aufzeichnungen Kaskade löschen auf dem FK abhängig Constraint-Einstellung.
  • Es ist auch ratsam, DELETE-Anweisungen immer zuerst in einer Nicht-Produktionseinstellung zu testen, um sicherzustellen, dass sie sich wie erwartet verhalten.
  • Schließlich ist es auch nie eine schlechte Idee, einen Mitarbeiter eine DELETE-Anweisung vor der Ausführung in einer Produktionsumgebung überprüfen zu lassen.

bearbeiten

ich dieses Trying to delete data from a row gehe davon aus meinen Sie Trying to delete data from aTabelle. Sie können Daten nicht aus einer Zeile löschen, obwohl Sie einen Wert in einer Zeile auf NULL aktualisieren können, wenn diese Spalte nullwertfähige Daten/Werte zulässt. Wenn dies der Fall ist, aktualisieren Sie Ihre Frage entsprechend.

1

Löschen von
Beginnen Sie mit einem ausgewählten und sicher sein, das sind die Zeilen, die Sie löschen mit einer Gruppe nicht

wollen arbeiten
SELECT SR_AREA, INS_PRODUCT, RESOLUTION_CD, CAST(CREATED AS DATE) AS DATEADD 
FROM S_SRV_REQ   
WHERE (dbo.fn_dstoffset(CREATED) >= '3-1-2016') 
AND  (dbo.fn_dstoffset(CREATED) <= DATEADD(D, 1, '3-31-2016')) 
AND  [SR_AREA] IS NOT NULL 

dann ändern Sie einfach die Auswahl .... Linie

löschen
DELETE 
FROM S_SRV_REQ   
WHERE (dbo.fn_dstoffset(CREATED) >= '3-1-2016') 
AND  (dbo.fn_dstoffset(CREATED) <= DATEADD(D, 1, '3-31-2016')) 
AND  [SR_AREA] IS NOT NUL 
Verwandte Themen