Część 1: Osobiście nie chciałbym grupować wielu instrukcji w jednym zapytaniu, aby zmniejszyć ryzyko wstrzyknięcia SQL. Jest to ustawienie w Twoim źródle danych na administratorze ColdFusion. Wykonywanie procedury składowanej, która może być tym, co robisz(?), to inna historia, ale powinieneś przeformułować swoje pytanie na „Pobierz klucz podstawowy po wstawieniu za pomocą procedury składowanej mySQL”, jeśli masz taki zamiar.
Część 2: ColdFusion, podobnie jak wiele innych rzeczy, sprawia, że uzyskanie klucza podstawowego dla nowo wstawionego rekordu jest bardzo łatwe — nawet jeśli używasz kluczy automatycznego przyrostu, identyfikatorów GUID lub czegoś takiego jak ROWNUM firmy Oracle. Będzie to działać na prawie każdej bazie danych obsługiwanej przez Adobe ColdFusion, w tym MSSQL lub MySQL. Jedynym wyjątkiem jest wersja bazy danych — na przykład MySQL 3 tego nie obsługuje; jednak MySQL 4+ to zrobi.
<cfquery result="result">
INSERT INTO myTable (
title
) VALUES (
<cfqueryparam value="Nice feature!" cfsqltype="cf_sql_varchar">
)
</cfquery>
<--- get the primary key of the inserted record --->
<cfset NewPrimaryKey = result.generatedkey>
Od wersji CF9+ możesz uzyskać dostęp do nowego identyfikatora (dla dowolnej bazy danych) za pomocą ogólnej nazwy klucza:
result.GENERATEDKEY // All databases
W przypadku CF8 różne bazy danych będą miały różne klucze w wartości wyników. Oto prosta tabela pomocna, którą skopiowałem z dokumentacji cfquery .
result.identitycol // MSSQL
result.rowid // Oracle
result.sys_identity // Sybase
result.serial_col // Informix
result.generated_key // MySQL
Jeśli masz jakieś pytania, możesz zobaczyć ładny zrzut w następujący sposób:
<cfdump var="#result#" />