改int非空自增列為int可為空列

2022-03-08 21:38:02 字數 2174 閱讀 5590

declare

@tablename

nvarchar(250)--

宣告讀取資料庫所有資料表名稱游標mycursor1

declare mycursor1 cursor

forselect name from dbo.sysobjects where

objectproperty(id, '

isusertable

') =

1open

mycursor1

--從游標裡取出資料賦值到我們剛才宣告的資料表名變數中

fetch

next

from mycursor1 into

@tablename

--如果游標執行成功

while (@@fetch_status=0

)begin

--宣告讀取資料表中所有int 不能為空 的字段 名稱游標mycursor2

declare

@columnname

nvarchar(250

)

--要修改的自增列

declare mycursor2 cursor

forselect name from syscolumns where id=

object_id(n'['

+@tablename+'

]') and name like ('

%id%

') and xtype=

56and isnullable=0--

開啟游標

open

mycursor2

--從游標裡取出資料賦值到我們剛才宣告的資料字段變數中

fetch

next

from mycursor2 into

@columnname

if (cursor_status('

global

','mycursor2

')=1 )--

游標的結果集至少有一行

begin

--如果游標執行成功

while (@@fetch_status=0

)

begin

--新增一列,把自增列值賦給新增列,刪除自增列,修改改列名

exec('

alter table ['+

@tablename+'

] add temp_id int null')

exec('

update [db_zabnew].[dbo].[zab_chakan] set temp_id='+

@columnname+''

)

exec('

alter table ['+

@tablename+'

] drop column '+

@columnname+''

)

exec sp_rename ''

+@tablename+'

.ck_id_id

',@columnname,'

column'--

自己原來的做法,這樣新加的列中就沒有資料了。

--先把自增列刪除

--exec ('alter table ['+@tablename+'] drop column '+@columnname+'')

--再新增非自增列

--exec ('alter table ['+@tablename+'] alter column '+@columnname+' [int] null')

fetch

next

from mycursor2 into

@columnname

endend

--關閉游標

close

mycursor2

--撤銷游標

deallocate

mycursor2 --

用游標去取下一條記錄

fetch

next

from mycursor1 into

@tablename

end--

關閉游標

close

mycursor1

--撤銷游標

deallocate mycursor1

事物 SQL分類 主鍵 自增 非空 注釋

eclipse自定義 塊 自定義模板 新增方式 window 最後乙個 data management sql develepment sql editor templates new name 是簡化後的 description 描述 pattern 簡化前的 應用場景 比較複雜 並且頻繁使用的時...

MySQL設定主鍵自增和非主鍵自增

mysql 每張表只能有1個自動增長字段,這個自動增長字段即可作為主鍵,也可以用作非主鍵使用,但是請注意將自動增長字段當做非主鍵使用時必須必須為其新增唯一索引,否則系統將會報錯。例如 將自動增長字段設定為主鍵 create table t1 id int auto increment primary...

關於mysql的int型主鍵自增問題

我們在使用mysql資料庫時,習慣使用int型作為主鍵,並設定為自增,這既能夠保證唯一,使用起來又很方便,但int型的長度是有限的,如果超過長度怎麼辦呢?我們先建立乙個測試表,建立語句如下 create table test1 id int primary keyauto increment nam...