2012-12-06 69 views
2

我需要編寫一個insert語句插入表中的列看起來像這樣如何增加在SQL Server在INSERT語句中的主鍵2005

  • demandtypeidPK, FK, int, not null
  • characvalueidPK, FK, int, not null
  • percentageint null
  • lastuservarchar(100), null
  • lastediteddatetime, null

這裏是INSERT聲明。注意有沒有在

value(, , 'Bob') 

值,因爲我認爲這就是自動遞增命令應該去

insert into tr_demandtypecharac(demandtypeID, characvalueid, lastuser) 
values( , , 'Bob') 

請用一個簡單的一點聲明

我只是想知道幫助如何手動插入此表

這是我的表格結構:

CREATE TABLE [dbo].[tr_demandtypecharac](
[demandtypeid] [int] NOT NULL, 
[characvalueid] [int] NOT NULL, 
[percentage] [int] NULL, 
[lastuser] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[lastedited] [datetime] NULL, 
CONSTRAINT [PK_tr_dtc_pkey] PRIMARY KEY CLUSTERED 
(
[demandtypeid] ASC, 
[characvalueid] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

ALTER TABLE [dbo].[tr_demandtypecharac] WITH CHECK 
ADD CONSTRAINT [FK_tr_dtc_cvid] 
FOREIGN KEY([characvalueid]) REFERENCES [dbo].[tr_characvalue] ([characvalueid]) 

ALTER TABLE [dbo].[tr_demandtypecharac] WITH CHECK 
ADD CONSTRAINT [FK_tr_dtc_dtid] 
FOREIGN KEY([demandtypeid]) REFERENCES [dbo].[tr_demandtype] ([demandtypeid]) 
+0

你的問題說'我只是想知道如何手動插入到這個表中,但是你的其他註釋表明你沒有自動增量列,並且你不能改變模式。簡單的答案是,如果不更改架構以包含自動增量列,則無法獲得自動增量值。有些奇怪的黑客可以使用,比如將全局變量存儲在某個表中,但這是一個非常糟糕的主意。 – ean5533

回答

0

給你貼CREATE TABLE聲明,沒有自動遞增(AKA標識)列,你會插入提供所有的列和值,如:

insert into tr_demandtypecharac(
     demandtypeid, characvalueid, 
     percentage, lastuser, lastedited) 
values(2, 3, 80, 'Bob', '01/01/2012') 

但是,如果你讓他們自動增量通過改變CREATE TABLE到:

CREATE TABLE [dbo].[tr_demandtypecharac](
[demandtypeid] [int] NOT NULL IDENTITY(1,1), 
[characvalueid] [int] NOT NULL IDENTITY(1,1), 
[percentage] [int] NULL, 
[lastuser] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
[lastedited] [datetime] NULL, 
CONSTRAINT [PK_tr_dtc_pkey] PRIMARY KEY CLUSTERED 
(
[demandtypeid] ASC, 
[characvalueid] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) 

那麼你會插入提供這樣所有非身份(非自動增量)列:

insert into tr_demandtypecharac(
     percentage, lastuser, 
     lastedited) 
values(80, 'Bob', '01/01/2012') 

但是,將多個列作爲標識(自動增量)列並不常見,並且通常該列是唯一的PRIMARY KEY列。

-4

你不應該使用INT作爲主鍵...繼承人的文章吧:http://techtrainedmonkey.com/2012/07/30/why-integers-are-lousy-primary-keys/

,但如果你...設定的領域爲身份和SQL Server會爲你做它...檢查出來:http://msdn.microsoft.com/en-us/library/ms186775.aspx

+5

-1 - 整數是主鍵的不錯選擇,除非你有很好的理由對付它們。但你確實需要一個很好的理由。 – Oded

+2

我同意Oded。那篇文章簡短,寫得不好,沒有提供細節,並且得出不公正的結論。爲什麼他糟糕的設計意味着整數不能成爲主鍵?我可以繼續下去。 – ean5533

+0

對不起...我不同意...這是我們應該擺脫的那種「概念」...整數是小系統的好鑰匙,但對於真實世界(可伸縮,多租戶,havy-use ,等等...)應用程序,他們會讓你陷入更多的麻煩,而不是解決...我不是故意發出傲慢的聲音......但我現在面臨int鍵的問題... – Leonardo

0

如果某列是autoincement列(比主鍵列不同的),那麼你在你的INSERT語句省略列,它會被填充

INSERT INTO tr_demandtypecharac (lastuser) VALUES ('Bob') 
+0

我這樣做了,它說 – Croeber

+0

消息515,級別16,狀態2,行1 不能將NULL值插入'demandtypeid'列'a7itm.dbo.tr_demandtypecharac';列不允許有空值。 INSERT失敗。 該聲明已被終止。 – Croeber

+0

demandtypeid和characvalueid都設置爲Identity Increment = 0:Allow Nulls:false – Croeber

5

如果。你想要一個唯一的和自動的int列遞增,使用IDENTITY關鍵字:

CREATE TABLE new_employees 
(
id_num int IDENTITY(1,1), 
fname varchar (20), 
minit char(1), 
lname varchar(30) 
) 

然後,當你插入表中,沒有爲該列插入任何東西 - 它會自動遞增本身。

相關問題