2009-11-03 118 views
1

我有一些情況需要編寫多行相同的值來設置一些表。假設我必須添加120行,並填充兩列。我正在尋找一個快捷方式,而不是將Insert行重複n次。這個怎麼做?要多次執行的SQL命令?

+1

你可以簡單地把你的插入語句放入一些while循環嗎? – 2009-11-03 03:22:43

+0

我可以,但我會在VB中做這件事,並認爲最好避免發送回到服務器。有沒有在SQL 2005中做sp循環? – Alex 2009-11-03 04:59:52

回答

0

將這些值放入未使用的表中以保持安全。從那裏你可以從這個表格插入你需要設置的表格。

1

如何

Insert Table(colsnames) 
Select Top 120 @value1, @Value2, etc. 
From AnyTableWithMoreThan120Rows 

只需確保類型的@Value列表中的值的colNames匹配列表

+0

大多數系統表都會有足夠的行。 – 2009-11-03 03:46:27

+0

但我在表中沒有這些值。爲他們創建一個表將破壞目的 – Alex 2009-11-03 04:21:08

+0

插入沒有從表中獲取數據,它只是使用表來獲得定義數量的行。 select子句應該只包含對傳入的參數值的引用。就像如果你執行了[從tablewith1000Rows中選擇'MyName'],你將得到1000行'MyName',並且表中沒有數據。 – 2009-11-03 14:12:56

1

怎麼樣

insert into tbl1 
(col1,col2) 
(select top 120 @value1,@value2 from tbl2) 

如果SQL Server 2008中 。 SQL Server 2008中的新增功能可以在單個查詢中向表中插入多行。

insert into tbl1 
(col1,col2) 
values 
(@value1,@value2),(@value1,@value2),.....(@value1,@value2) 
0
  1. 創建與您的數據的Excel電子表格。
  2. 將speadsheet導入到Sql Server中。
1

在SQL Server Management Studio中,您可以使用 「GO」 的關鍵字與參數:

INSERT INTO YourTable(col1, col2, ...., colN) 
VALUES(1, 'test', ....., 25) 
GO 120 

但是,這隻能在管理工作室(這不是一個適當的T-SQL命令 - 這是一個Mgmt Studio命令字)。

馬克

0

你甚至可以像這樣(只是一個例子)

declare @tbl table(col1 varchar(20),col2 varchar(20)) 
; with generateRows_cte as 
(
    select 
     1 as MyRows 

     union all 
     select 
      MyRows+1 

     from generateRows_cte 
     where MyRows < 120 
) 
insert into @tbl(col1,col2) 
select 
'col1' + CAST(MyRows as varchar),'col2' + CAST(MyRows as varchar) 
from generateRows_cte OPTION (MAXRECURSION 0) 
select * from @tbl 

注嘗試: - 爲什麼你不與批量插入到試圖從SqlServer的數據集?我沒有注意到你也有前端(VB)!

+0

像查爾斯的解決方案,但也許更好,因爲在飛行中創建表。我喜歡它。謝謝。 – Alex 2009-11-04 17:23:12

+0

即使您可以藉助SYS.COLUMNS,master..spt_values等一些系統表的幫助來完成您的任務 – 2009-11-05 03:40:37