Прочный путь - с замками.Это также гарантирует, что вы не сможете, чтобы два человека отправляли одно и то же имя пользователя «в одно и то же время» (если они используют один и тот же веб-сайт?), И вы в конечном итоге вставляете оба.
<cfquery name="adduser">
INSERT
INTO Register(Username,Password)
OUTPUT INSERTED.Username
SELECT
<cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" />,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#Password#" />
WHERE <cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" /> NOT IN (
SELECT Username
FROM Register
WITH(ROWLOCK, UPDLOCK, SERIALIZABLE)
WHERE Username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Userame#" />
)
</cfquery>
<cfif adduser.RecordCount EQ 1>
<!--- success ---->
<cfelse>
<!--- failure ---->
</cfif>
Поскольку вставка может быть потенциально неудачной по разным причинам, если вы действительно хотите быть уверенным, в ошибке "cfelse" вы можете добавить запрос, чтобы проверить, существует ли имя пользователя.
Вам также следует рассмотреть вопрос о том, чтобы сделать это поле БД UNIQUE, чтобы INSERT завершился ошибкой, но в этом случае вам нужно TRY-CATCH запрос, чтобы отловить сбои.