SQL上にデータベースとテーブルを作成し、データを入力しました。
その後で[Integer]型のフィールドをオートナンバー型に変更したのですが
うまくいきません。
SQLではテーブル作成&データ入力済み後では不可能なのでしょうか?
どなたか、わかられる方教えて頂けないでしょうか?
お願い致します。
<現在の方法>
Dim strCnn As String
Dim cnn As ADODB.Connection
Dim strSQL As String
strCnn = "Provider=SQLOLEDB;" _
& "Data Source=" & strServerName & ";" _
& "User ID=" & strUserName & ";" _
& "Password=" & strPassword & ";" _
& "Initial Catalog=てすと;" _
& "Network Library=dbmssocn;"
Set cnn = New ADODB.Connection
cnn.Open strCnn
strSQL = "ALTER TABEL てすと ALTER CULUMN TestID IDENTITY(1,1)"
cnn.Execute(strSQL)
cnn.Close
Set cnn = Nothing
どちらかといえばVBじゃなくてDBMSのほうの質問のような気がしますが。
テーブルへのデータ入力後は、オートナンバー型への変更は不可のはずです。
(SQLserverの詳しい仕様は存じ上げませんが)
ALTER TABLE … ADD 〜 で、新たにオートナンバー型のフィールドを追加してみては?
> どちらかといえばVBじゃなくてDBMSのほうの質問のような気がしますが。
同感…。(^^;)
さて、エラーの原因についてですが、komaさんが書かれているように、
IDENTITYは ADD 時にしか指定できない事になっているようです。
(Transact-SQL リファレンスの、"ALTER TABLE"の項を参照してください)
それ以外で気になる点としては、
・ALTER TABEL ではなく、ALTER TABLE です。
・ALTER CULUMN ではなく、ALTER COLUMN です。
・正確には、Integer型→int型です。
あたりですね。
一旦データが存在するフィールドをAUTOIncrement
型にするには、そのフィールドを削除して、同じ名前の
フィールドを定義する必要がある。
JoinKeyに使用していていまさら消すとまずい場合は
別の名前のAUとIncrementフィールドを定義する必要が
ある。もっとも前のInt型もAutoIncrement型にしたい
場合は、プログラムに手を入れる必要がある。
お返事とお礼が遅くなりました。
皆様、回答ありがとうございました。
結果として解決致しました。
.Netマガジンに、
"SET IDENTITY_INSERT [台帳] ON"
の機能が載ってました。
>koma様、魔界の仮面弁士様、浜的サム様
お答え頂きほんとうにありがとうございました。
それから、
> どちらかといえばVBじゃなくてDBMSのほうの質問のような気がしますが。
確かに言われてみればそうですね。(~_~;)
何分、VBで作っていたものですからこちらに書込みしてしまいました。
以後、気をつけます。
ところで「DBMS」について質問できるところがあるのでしょうか?
ここには検索して来てしまいましたので・・・。
VBユーザ向けのDB関連掲示板なら、たとえば
VB初心者友の会
http://www2j.biglobe.ne.jp/~little-g/vbtomo.html
にデータベースQ&A掲示板があったりしますが。