2012-06-12 5 views
0

У меня есть база данных клиентов Я хотел бы добавить набор номеров карт. В таблице есть несколько столбцов, которые будут одинаковыми, однако количество карт увеличится на 1 до конца. Так, например ... Я хочу добавить Подарочные карты 1 - 250 с другими столбцами то же самое ... так что хотелось бы что-то вроде этого:Добавление нескольких записей в таблицу

Cardnum  price booktype service 
1    9.99  1   12 
2    9.99  1   12 
3    9.99  1   12 

и т.д. и т.п. ... Это будет повторяться до тех пор, cardnum не было '250' Возможно ли это сделать с помощью SQL Query?

Спасибо.

+0

Какие РСУБД? Простой автоинкремент на Cardnum позаботится об этом, с 250 идентичными вставками. –

+0

SQL Server. Нужно ли быть хранимой функцией? Было ли это что-то вроде select startnum, endnum from cardtable while startnum> endnum? Я уверен, как вставить несколько values..and, что «выбрать» в обновлении, очевидно, @ Infront из startnum и endnum – Shmewnix

ответ

0

@jimdrang уже предоставлен ответ, но поскольку я только что закончил полный пример с CREATE TABLE и хранимой процедурой, чтобы выполнить эту работу, я думаю, я мог бы также опубликовать ее в интересах любого, кто ищет это в будущем.

CREATE TABLE Cards 
(
    Cardnum int not null primary key, 
    price money not null, 
    booktype int not null, 
    service int not null 
); 
GO 

CREATE PROCEDURE [dbo].[sp_AddCards] (
    @Price money, 
    @BookType int, 
    @Service int, 
    @NumCards int, 
    @StartNum int 
) 
    AS 
BEGIN 
    DECLARE @CurCard int 
    SELECT @CurCard = @StartNum 

    WHILE @CurCard < @StartNum + @NumCards 
    BEGIN 
    INSERT INTO Cards (Cardnum, price, booktype, service) 
    VALUES (@CurCard, @Price, @BookType, @Service) 

    SELECT @CurCard = @CurCard + 1 
    END 
END 

GO 

EXEC sp_AddCards @Price=9.99, @BookType=1, @Service=12, @NumCards=250, @Startnum=810041; 

SELECT * FROM Cards; 

DROP TABLE Cards; 
DROP PROCEDURE sp_AddCards; 

Надеюсь, это поможет!

1

Прежде всего сделайте cardnum как «identity» (начальное значение будет 1). Затем в цикле while от 1 до 250 просто напишите инструкцию insert для остальных трех колонок. Надеюсь, вы сами можете написать код.

+0

я изначально думал: SELECT, начало, конец начала WHILE <= конец начинают INSERT INTO cardtable (cardnum = start, price = '9.99', booktype = '1', service = '12') ЦЕННОСТИ (начало) SET start = start + 1 END – Shmewnix

+0

Какой из них нет ... Я запутался в нескольких вставках в таблицу, задерживая «while». – Shmewnix

1

Поскольку таблица уже существует, попробуйте следующее:

DECLARE @book INT 
SET @book = 810041 
WHILE (@book) < 810291 
BEGIN 
    INSERT INTO tableName 
    VALUES(@book,9.99,1,12) 
    SET @book = @book +1 
END 

Предполагая, что вы используете SQL-Server 2005 или более поздней версии и хотите создать эту таблицу с нуля:

CREATE TABLE [dbo].[#books](
     [id] [int] IDENTITY(1,1) NOT NULL, 
     [price] decimal(6,2) NULL, 
     [bookType] [int] NULL, 
     [service] [int] NULL) 

    INSERT INTO #books 
    VALUES(9.99,1,12) 
    GO 250 
+0

Таблица уже существует. Я «обновляю» таблицу, чтобы включить 250 одинаковых карт (только разные цифры). Это также не происходит 1 - 250, это на самом деле похоже на 810041 - 8100291, поэтому они должны быть переменными. – Shmewnix

+0

Проверьте мой предыдущий комментарий, он должен быть переменной. – Shmewnix

+0

ОК, проверьте мои последние изменения – jimdrang

1

Вам нужно будет создайте сохраненную процедуру для этого, и код будет таким образом

declare @cnt int 

set @cnt = 0 
while(@cnt < 250) 
begin 
insert into dbo.xxx(price, booktype, servic) 
values(9, 1, 12) 

set @cnt = @cnt + 1 
end 
+0

Вы можете установить '@ cnt' любое значение, объявить переменная '@ end' заменить 250 – codingbiz

+0

Perfect. Благодаря! – Shmewnix

Смежные вопросы