2

テーブルに値を挿入しようとしているクエリがあり、これらの値の 1 つ (ImportID) は、データベース内のタイプが uniqueidentifier です。Adobe CF のドキュメントを調べたところ、cf_sql_char と cf_sql_idstamp の両方が、uniqueidentifier 型の cfquery パラメータで機能するはずであることがわかりました。同じことを言っているこのスレッドも読みました: MS SQL の uniqueidentifier フィールド タイプに使用する最も適切な Coldfusion cfsqltype は何ですか?

cfqueryparam タグに「maxlength」パラメータを使用し、タイプとして cf_sql_char を使用している場所をいくつか見つけましたが、コードを機能させることができませんでした。「文字列からuniqueidentifierへの変換中に変換に失敗しました」という行に沿ってエラーが発生し続けます。UID を生成し、以下の挿入を試みるコードを含めています (変数名の一部を置き換え、インポート用に他のすべての列を取り出しました)。

<cfscript>
    ImportID = createUUID();
</cfscript>

<cfquery name="INSERTTableName" datasource="#Application.Datasource#">
    INSERT INTO TableNameImport(
        ImportID
    )
    VALUES(
        <cfqueryparam value="#variables.ImportID#" cfsqltype="CF_SQL_CHAR">
    )
</cfquery>

どんな助けでも大歓迎です。前もって感謝します。

*********************************編集**************** ****************

答えを見つけました:

<cfquery name="INSERTTableName" datasource="#Application.Datasource#">
    DECLARE @ImportID uniqueidentifier
    SET @ImportID = NEWID()

    INSERT INTO TableNameImport(
        ImportID
    )
    VALUES(
        @ImportID
    )
</cfquery>

問題は、coldfusion 呼び出しから作成された UUID が、Microsoft SQL Server で作成されたものとは異なる形式であることでした。

4

1 に答える 1

0

あなたは正しいです。SQL は GUID を使用し、createUUID は UUID をマンクします。どちらも 32hex 値ですが、異なるテキスト形式 (ダッシュの位置) を使用します。また、別の計算を使用してランダム値を生成します。テキスト形式を変更して GUID ダッシュの場所を指定するか、バイナリ値を送信する場合は、UUID を利用できます。上記の例では、cf がその値への参照を必要とする場合、GUID を返すこともできます。

于 2012-07-03T15:16:00.890 に答える