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

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