Excelからレコードをインポートしていますが、重複を避けたいと思います。 ASPクラシックでは、データベースの重複をチェックする関数を書いています。見つかった場合は、ユーザー名の末尾に数字を追加し、ユーザー名が一意であるかどうかを再度確認します。たとえば、petejonesはpetejones1になります。残念なことに、このスクリプトはデータベースが約150kレコードになるほど遅くなり、一意性を検索するのに永遠にかかります。 T-SQLのSQL Server 2008で直接同じことを行う方法はありますか?プロセス全体が迅速に邪悪になるでしょう。ユニークなプロセスがありますか?重複するSQL Server 2008と従来のASPの防止
これは古典的なASPの機能です。私はこれを行うためのより良い方法があることを知っていますので、私のスクリプトを笑ってはいけません。
FUNCTION CreateUniqueUsername(str)
SET DbConn = Server.CreateObject("ADODB.connection")
DbConn.Open DSN_LINK
nCounter = 0
Unique = ""
IF InStr(str, "@") > 0 THEN
strUsername = Left(str,InStr(str, "@")-1)
ELSE
strUsername = str
END IF
strUsername = FormatUsername(strUsername)
strSQL = "SELECT UserName FROM Member WHERE UserName = '" & strUsername & "';"
SET rs = DbConn.Execute(strSQL)
IF rs.EOF AND rs.BOF THEN
nFinalUsername = strUsername
ELSE
DO UNTIL Unique = true
nCounter = nCounter + 1
nFinalUsername = strUsername & nCounter
strSQL2 = "SELECT UserName FROM Member WHERE UserName = '" & nFinalUsername & " ' "
SET objRS = DbConn.Execute(strSQL2)
IF objRS.EOF THEN
Unique = true
ELSE
intCount = intCount
END IF
LOOP
objRS.Close
SET objRS = Nothing
END IF
rs.Close
SET rs = Nothing
SET DbConn = Nothing
CreateUniqueUsername = nFinalUsername
END FUNCTION
FUNCTION FormatUsername(str)
Dim OutStr
IF ISNULL(str) THEN EXIT FUNCTION
OutStr = lCase(Trim(str))
OutStr = Replace(OutStr, "’", "")
OutStr = Replace(OutStr, "”", "")
OutStr = Replace(OutStr, "'","")
OutStr = Replace(OutStr, "&","and")
OutStr = Replace(OutStr, "'", "")
OutStr = Replace(OutStr, "*", "")
OutStr = Replace(OutStr, ".", "")
OutStr = Replace(OutStr, ",", "")
OutStr = Replace(OutStr, CHR(34),"")
OutStr = Replace(OutStr, " ","")
OutStr = Replace(OutStr, "|","")
OutStr = Replace(OutStr, "&","")
OutStr = Replace(OutStr, "[","")
OutStr = Replace(OutStr, ";", "")
OutStr = Replace(OutStr, "]","")
OutStr = Replace(OutStr, "(","")
OutStr = Replace(OutStr, ")","")
OutStr = Replace(OutStr, "{","")
OutStr = Replace(OutStr, "}","")
OutStr = Replace(OutStr, ":","")
OutStr = Replace(OutStr, "/","")
OutStr = Replace(OutStr, "\","")
OutStr = Replace(OutStr, "?","")
OutStr = Replace(OutStr, "@","")
OutStr = Replace(OutStr, "!","")
OutStr = Replace(OutStr, "_","")
OutStr = Replace(OutStr, "''","")
OutStr = Replace(OutStr, "%","")
OutStr = Replace(OutStr, "#","")
FormatUsername = OutStr
END FUNCTION
私はまだSQLを勉強しています。
いくつかの説明は必須ですが、投稿コードは答えがありません。ユーザーが自分の要求したユーザー名の末尾に数字を追加した場合、あなたのコードはすべての場合に機能しますか? – AnthonyWJones
名前に名前が付いている場合(例:Pete500)、「Pete500」が存在する場合は「Pete5001」に変更されます。次の「ピート」は「Pete5002」になります。これは潜在的な欠点です。 – jim31415
+1ユーザー名が一意である限り、問題はありません。 – AnthonyWJones