したがって、主キーとしてID列を持つテーブルがあるので、それは整数です。それで、なぜSCOPE_IDENTITY()
はC#アプリケーションにintではなく常に10進値を返すのですか?これは、C#で10進数値が暗黙的に整数に変換されないため、本当に面倒です。つまり、Postgresは同等の機能..
なぜSCOPE_IDENTITY()
は単なる整数を返さないのですか?主キーに小数/非同一値を一般的に使用する人はいますか?
SQL Serverでは、IDENTITY
プロパティをtinyint
、smallint
、int
、bigint
、decimal(p, 0)
に割り当てることができます、またはnumeric(p, 0)
列。したがって、SCOPE_IDENTITY
関数は、上記のすべてを網羅できるデータ型を返す必要があります。
前の回答で述べたように、返す前にサーバー上のint
にキャストするだけで、ADO.NETは期待どおりにそのタイプを検出します。
クエリまたはストアドプロシージャから返す前にキャストすることはできません(SPは常にintを返しますが、出力パラメーターを使用している可能性があります)。
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
のように
そして、なぜこれを行うのですか?おそらく、より柔軟になり、より大きな数を処理するでしょう。
スコープID 戻り値はdecimal(38,0)
キャストする、OUTPUT句を使用する、またはSELECT SCOPE_IDENTITY()
ではなく出力パラメーターにクライアントに割り当てる
これを使用してみると、整数が返されます:
ExecuteScalar('insert...; select CONVERT(int,scope_identity())');