Есть ли более простой способ заполнить столбец в SQL Server 2008? - PullRequest
0 голосов
/ 29 сентября 2011

Я создаю временную таблицу и хочу заполнить столбец с 0-9999, используя T-SQL.

create table #tmp5 (userID int)

Есть ли более простой способ заполнить столбец вместо использования цикла?

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Есть несколько подходов detaild здесь .

Помимо циклов (с и без IDENTITY), творческого использования CTE, ROW_NUMBER и др.

2 голосов
/ 30 сентября 2011

Использование GO N --N=number of iterations

CREATE TABLE #tmp5 (userID int IDENTITY(0, 1))
Go
INSERT INTO  #tmp5 DEFAULT VALUES
Go 10000

Или это:

CREATE TABLE #tmp5 (userID int)   
GO
INSERT INTO  #tmp5 VALUES (0)
GO
DECLARE @N int
SELECT @N=COUNT(*) FROM #tmp5
INSERT INTO  #tmp5 
SELECT userID+@N FROM #tmp5 WHERE userID+@N<10000
Go 14
0 голосов
/ 14 октября 2011
use AdventureWorks --Or any database with a sizable amount of objects in it
go

insert into #tmp5 (userID)
select top 9999
  row_number() over (order by (select null)) as UserID
from sys.objects a
cross join sys.objects b 

Это в основном row_numbers для всех системных объектов, и перекрестное соединение гарантирует, что у вас есть целая куча из них для номера строки. В зависимости от размера таблицы, которую вы хотите создать, и / или размера таблицы sys.objects, вам потребуется больше или меньше перекрестных объединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...