97

したがって、ID列を主キーとして持つテーブルがあるため、これは整数です。SCOPE_IDENTITY()では、 C# アプリケーションに常に int ではなく 10 進数値を返すのはなぜですか? C# では 10 進数の値が暗黙的に整数に変換されないため、これは非常に厄介です。つまり、SQL Server と Postgres を使用しているため、多くのものを書き直して、多くのヘルパー メソッドを用意する必要があります。同等の機能..

SCOPE_IDENTITY()単純な整数を返さないのはなぜですか? 主キーに 10 進数/非 ID 値を一般的に使用する人はいますか?

4

5 に答える 5

111

SQL Server では、プロパティをIDENTITY、、、、、、または列に割り当てることができます。したがって、関数は上記のすべてを網羅できるデータ型を返す必要があります。tinyintsmallintintbigintdecimal(p, 0)numeric(p, 0)SCOPE_IDENTITY

以前の回答が言ったようintに、それを返す前にサーバーにキャストするだけで、ADO.NETは期待どおりにそのタイプを検出します。

于 2010-04-08T16:59:32.887 に答える
37

クエリまたはストアド プロシージャから返す前にキャストできませんか (SP は常に int を返しますが、出力パラメーターを使用している可能性があります)。

お気に入りSELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

そして、なぜこれを行うのですか?おそらく、より柔軟になり、より大きな数を処理できるようになります。

于 2010-04-08T16:28:08.033 に答える
4

スコープ ID の戻り値は decimal(38,0) です

SELECT SCOPE_IDENTITY()CAST するか、OUTPUT 句を使用するか、クライアントではなく出力パラメーターに割り当てます。

于 2010-04-08T16:48:23.110 に答える
3

これを使用してみると、整数が返されます。

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
于 2010-04-08T17:13:14.860 に答える