Avatar billede jpi Mester
28. februar 2018 - 14:35 Der er 4 kommentarer og
1 løsning

Indlæse data table, men kun ikke i forvejen eksisterende

Hej

Jeg har følgende stored procedure:

CREATE PROC [dbo].[usp_SaveHitDS_01]
    @Details HitType READONLY
AS
BEGIN

  INSERT INTO tbl_Hits(PageID, Position, Timestamp)
  SELECT PageID, Position, TimeStamp FROM @Details;
END

Det virker fint, men @Details kan godt indeholde data som allerede findes i tbl_Hits.
Derfor vil jeg gerne have at den kun indlæser dem der ikke findes i forvejen.

Jeg har prøvet med følgende bagest i SELECT-sætningen, men uden held:
WHERE (NOT EXISTS(SELECT * FROM tbl_Hits WHERE pageID = @Details.pageId AND Position = @Details.position))

Fejlen er følgende: Must declare the scalar variable "@Details"

Hvordan kan jeg løse mit problem?

mvh
Avatar billede Slettet bruger
06. marts 2018 - 10:05 #1
Hvorfor har du lavet en SP til dette? Hvad er Hittype? Du kan ikke sætte dine variabler til at referer til kolonner.
Avatar billede jpi Mester
06. marts 2018 - 11:33 #2
HitType er en User defined table type:
CREATE TYPE [dbo].[HitType] AS TABLE(
    [ID] [int] NULL,
    [pageID] [int] NULL,
    [Position] [varchar](20) NULL,
    [TimeStamp] [datetime] NULL
)
GO
Avatar billede Slettet bruger
06. marts 2018 - 11:47 #3
Se det her eksempel:

http://www.sqlservercentral.com/blogs/steve_jones/2012/09/19/creating-a-user-defined-table-type/

Burde give dig noget hjælp. Du skal referer til din hittype når du indsætter data via en variable du declarer
Avatar billede Slettet bruger
06. marts 2018 - 11:49 #4
Sådan her fx - Du skal skrive dine nøgler ind som udgør den unikke række. Jeg har bare taget udgangspunkt i pageid

CREATE PROC [dbo].[usp_SaveHitDS_01]
    @Details HitType READONLY
AS
BEGIN
  SELECT PageID, Position, TimeStamp FROM @Details a

  where not exists ( select Pageid from tbl_Hits b where a.pageID = b.pageid)
END
Avatar billede jpi Mester
12. marts 2018 - 10:40 #5
Tusind tak!
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