第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

SQLServer,如何在創(chuàng)建表后設(shè)置自動(dòng)增量而不丟失數(shù)據(jù)?

SQLServer,如何在創(chuàng)建表后設(shè)置自動(dòng)增量而不丟失數(shù)據(jù)?

SQLServer,如何在創(chuàng)建表后設(shè)置自動(dòng)增量而不丟失數(shù)據(jù)?我有張桌子table1在Sqlserver 2008中,其中有記錄。我要主鍵table1_Sno列為自動(dòng)遞增列。在不進(jìn)行任何數(shù)據(jù)傳輸或表克隆的情況下,能做到這一點(diǎn)嗎?我知道我可以使用ALTERTABLE來(lái)添加一個(gè)自動(dòng)增量列,但是我可以簡(jiǎn)單地將AUTO_CREATION選項(xiàng)添加到作為主鍵的現(xiàn)有列中嗎?
查看完整描述

3 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

更改IDENTITY屬性實(shí)際上是元數(shù)據(jù)只進(jìn)行更改。但是,要直接更新元數(shù)據(jù),需要在單用戶(hù)模式下啟動(dòng)實(shí)例,并在sys.syscolpars而且是沒(méi)有文件記錄的/沒(méi)有支持的,不是我會(huì)推薦的東西,也不是我會(huì)給出的任何其他細(xì)節(jié)。

對(duì)于在SQLServer 2012+上遇到這個(gè)答案的人來(lái)說(shuō),要實(shí)現(xiàn)自動(dòng)遞增列的結(jié)果,最簡(jiǎn)單的方法是創(chuàng)建一個(gè)SEQUENCE對(duì)象并設(shè)置next value for seq作為列的默認(rèn)值。

或者,對(duì)于以前的版本(從2005年起),這個(gè)解決方案發(fā)布在此連接項(xiàng)顯示了一種完全支持的方法來(lái)完成此操作,而不需要使用ALTER TABLE...SWITCH..還在MSDN上發(fā)表博客這里..盡管實(shí)現(xiàn)這一目標(biāo)的代碼并不簡(jiǎn)單,而且也存在一些限制-例如要更改的表不能成為外鍵約束的目標(biāo)。

示例代碼。

設(shè)置測(cè)試表identity列。

CREATE TABLE dbo.tblFoo 
(bar INT PRIMARY KEY,filler CHAR(8000),filler2 CHAR(49))INSERT INTO dbo.tblFoo (bar)SELECT TOP (10000) ROW_NUMBER() OVER
 (ORDER BY (SELECT 0))FROM master..spt_values v1, master..spt_values v2

修改為有一個(gè)identity列(或多或少是瞬間的)。

BEGIN TRY;
    BEGIN TRANSACTION;

    /*Using DBCC CHECKIDENT('dbo.tblFoo') is slow so use dynamic SQL to
      set the correct seed in the table definition instead*/
    DECLARE @TableScript nvarchar(max)
    SELECT @TableScript = 
    '
    CREATE TABLE dbo.Destination(
        bar INT IDENTITY(' + 
                     CAST(ISNULL(MAX(bar),0)+1 AS VARCHAR) + ',1)  PRIMARY KEY,
        filler CHAR(8000),
        filler2 CHAR(49)
        )

        ALTER TABLE dbo.tblFoo SWITCH TO dbo.Destination;
    '       
    FROM dbo.tblFoo    WITH (TABLOCKX,HOLDLOCK)

    EXEC(@TableScript)


    DROP TABLE dbo.tblFoo;

    EXECUTE sp_rename N'dbo.Destination', N'tblFoo', 'OBJECT';


    COMMIT TRANSACTION;END TRYBEGIN CATCH    IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();END CATCH;

測(cè)試結(jié)果。

INSERT INTO dbo.tblFoo (filler,filler2) OUTPUT inserted.*VALUES ('foo','bar')

施予

bar         filler    filler2----------- --------- ---------10001       foo       bar

洗凈

DROP TABLE dbo.tblFoo


查看完整回答
反對(duì) 回復(fù) 2019-07-03
  • 3 回答
  • 0 關(guān)注
  • 915 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)