Avatar billede the-clint Nybegynder
10. marts 2014 - 13:43 Der er 8 kommentarer og
1 løsning

insert into

Hej
Jeg har den her select:

SELECT  /*COUNT(CLOSE_TIME) AS 'Closed', */
    COUNT(OPEN_TIME) AS 'Open',
    0 AS 'Closed',
    DATEPART(Week, CAST(OPEN_TIME AS Date)) AS 'Week',
        YEAR(CAST(OPEN_TIME AS date)) AS 'year',
        MONTH(CAST(OPEN_TIME AS date)) AS 'Month',
        'Opened' AS 'Status',
           
        CASE
    WHEN NOT EXISTS    (
    SELECT * FROM #OpenClosedIncidents
    WHERE    Iyear=YEAR(CAST(OPEN_TIME AS date)) AND
        Imonth=MONTH(CAST(OPEN_TIME AS date)) AND
        Iweek=MONTH(CAST(OPEN_TIME AS date))
                                )
        THEN
                  'insert'
        ELSE
          'update'   
        END AS 'insertorupdate'

FROM .........

I min THEN section vil jeg gerne insætte post i min midlertidigen tabel eller opdaterer den. Men hvordan gør jeg det? Uanset hvad jeg gør, får jeg en syntax error i FROM
Avatar billede Syska Mester
10. marts 2014 - 14:01 #1
Du kan ikke lave INSERT/UPDATE i en SELECT ...

Kig på http://msdn.microsoft.com/en-us/library/bb510625.aspx

mvh
Avatar billede the-clint Nybegynder
10. marts 2014 - 15:19 #2
Hej buzzzz
Kan du lave en skitse over hvordan MERGE vil kunne løse mit problem. Jeg synes det er svært at gennemskue hvordan det skal se ud. Jeg har ikke rettigheder til at lave procedures så det skal være en løsning uden dem.
Avatar billede Syska Mester
10. marts 2014 - 20:06 #3
Uden at kunne huske syntax for MERGE så er det noget ala:

Kig på eksemplerne i linket ... de gør noget ala det du gerne vil.

Specielt første 'A. Using MERGE to perform INSERT and UPDATE operations on a table in a single statement'
Avatar billede the-clint Nybegynder
11. marts 2014 - 09:18 #4
Jeg kender godt de eksempler du henviser til. Der bruges stored procedures og det har jeg ikke tilladelse til at lave. Merge er sikkert hvad jeg har brug for, men jeg kan ikke finde ud af at lave det så det erstatter det jeg har lavet.
Avatar billede Syska Mester
11. marts 2014 - 19:02 #5
Du skal bruge dette:
MERGE Production.UnitMeasure AS target
    USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
    ON (target.UnitMeasureCode = source.UnitMeasureCode)
    WHEN MATCHED THEN
        UPDATE SET Name = source.Name
    WHEN NOT MATCHED THEN   
        INSERT (UnitMeasureCode, Name)
        VALUES (source.UnitMeasureCode, source.Name)
        OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;


Fremgangs måde ( Jeg har ikke kigget på din query, kan ikke lige gennemskue dine casts etc. men det virker rimelig simpelt.

* Altså ... du har 2 tables ( TAGET & SOURCE )
* Dem skal du match på et eller andet. ( ID og/eller andre ting, som navn eller en status column )
* Derefter har du mulighed for 2 ting.
** Matched ... ergo din row findes og du kan dermed lave en UPDATE
** Not Matched ... ergo din row er der ikke og du kan lave en insert.

Håber dette giver mere mening.
Avatar billede the-clint Nybegynder
25. marts 2014 - 07:57 #6
Løsningen blev og lave 2 selects og indsætte resultater ind i en midlertidig tabel. Derefter selecte fra den tabel.
Avatar billede the-clint Nybegynder
25. marts 2014 - 07:59 #7
tak for hjælpen.
Avatar billede the-clint Nybegynder
25. marts 2014 - 08:05 #8
Hej buzzzz
Ku du ikke lige skrive et svar så jeg kan komme af med nogle point.
Avatar billede Syska Mester
25. marts 2014 - 10:26 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester