webForumDet fria alternativet

Output genererar "Input"?

Databaser & SQL

8 svar · 339 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Varför måste jag ange en inparameter på denna OUTPUT?

ALTER PROCEDURE suv_setget
	(
/* Deklarera outputvariabel */
	@guid uniqueidentifier OUTPUT
	)
AS
/* Sätt in en ny post */
	INSERT into SecUploadValider (suv_datetime) Values (GETDATE())
/* Hämta senaste posten och lägg in guid i outputvariabeln*/
	SELECT @guid=suv_guid from SecUploadValider where suv_id = @@identity

RETURN
Medlem sedan dec. 200012 464 inlägg
#2

vad menas? I vilket sammanhang måste du ange en input parameter?

Medlem sedan nov. 20017 144 inlägg
#3

När jag kör den i access så kräver den inparameter av mig.

Medlem sedan nov. 20017 144 inlägg
#4

Alltså det är ingen Access SP utan en MS Sql
Jag bara kör den via Access.

Medlem sedan dec. 200012 464 inlägg
#5

Det låter mer som ett fel i Access. Svårt att göra något åt i så fall.

Medlem sedan nov. 20017 144 inlägg
#6

OK

Medlem sedan dec. 1999707 inlägg
#7

Ett litet tips: undvik helst @@identity i SqlServer, andvänd heller SCOPE_IDENTITY().

Medlem sedan nov. 20017 144 inlägg
#8

toha skrev:

Ett litet tips: undvik helst @@identity i SqlServer, andvänd heller SCOPE_IDENTITY().

Varför är det bättre?

Medlem sedan dec. 1999707 inlägg
#9

Både SCOPE_IDENTITY() och @@identity returnerar senaste identity inom den aktuella sessionen men SCOPY_IDENTITY() returnerar för den aktuella queryn, stored proceduren, triggern etc.

Ett scenario skulle kunna vara att du har en insert-trigger på en tabell som lägger in värden i en annan tabell. Då returnerar @@identity id:t för den andra tabellen.

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)