2016-05-15 18 views
0

我已經使用SSMS 2016候選發佈版中的內置遷移工具將本地SQL Server數據庫遷移到Azure。除了使用Azure中禁用的功能的存儲過程轉換失敗之外,它看起來還不錯。在SSMS中生成腳本2016 RC for Azure數據庫忽略默認值

我現在已經使用相同的腳本選項從本地數據庫和Azure版本的數據庫中生成模式的腳本,以便我可以比較數據庫的腳本並識別任何差異或其他缺失項目。

我的問題是,從Azure生成的腳本不包括列上的默認值約束。直接在SSMS中查看錶格定義顯示已正確設置了默認值。

任何人都可以幫助我獲得SSMS腳本生成器將默認值約束添加到生成的腳本?

這是從本地數據庫的示例腳本:

SET ANSI_NULLS ON 
CREATE TABLE [xOrgBusinessType](
    [OrgID] [int] NOT NULL, 
    [BusTypeID] [int] NOT NULL, 
    [CRD] [datetime] NOT NULL CONSTRAINT [DF_xOrgBusinessType_CRD] DEFAULT (getutcdate()), 
    [CRDByID] [int] NOT NULL CONSTRAINT [DF_xOrgBusinessType_CRDByID] DEFAULT ((0)), 
CONSTRAINT [PK_xOrgBusinessType] PRIMARY KEY CLUSTERED 
(
    [OrgID] ASC, 
    [BusTypeID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) 

,並從Azure數據庫

SET ANSI_NULLS ON 
CREATE TABLE [xOrgBusinessType](
    [OrgID] [int] NOT NULL, 
    [BusTypeID] [int] NOT NULL, 
    [CRD] [datetime] NOT NULL, 
    [CRDByID] [int] NOT NULL, 
CONSTRAINT [PK_xOrgBusinessType] PRIMARY KEY CLUSTERED 
(
    [OrgID] ASC, 
    [BusTypeID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

回答

0

相當於劇本我已經找到了答案,以我自己的問題。比較兩個數據庫的腳本時我犯了一個錯誤。本地數據庫腳本由SSMS 2014生成,而Azure數據庫腳本由SSMS 2016生成,兩個版本對待CONSTRAINT .. DEFAULT ..的方式不同。

在2014年的情況下,約束與列定義一起編寫腳本。在2016年的情況下,所有約束都在後面的塊中編寫腳本,如ALTER TABLE .. ADD CONSTRAINT ..命令。

雖然我的問題得到了解答,但SSMS 2016的方法似乎有點奇怪。在上述腳本的情況下,CREATE TABLE腳本在第2500行左右,而ALTER TABLE腳本在第13100行。此外,我已將選項設置爲「Include descriptive headers」,但ALTER TABLE語句不在一個對象頭文件,即使腳本的那部分定義了一個約束對象。

我想知道爲什麼ALTER TABLE語句遠離表定義。似乎沒有理由不將它們包含在CREATE TABLE腳本之後。