Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Mysql заполнить таблицу циклом

n0bleman Новичок (0), открыт 3 недели назад
Уже месяц ищу не найду самую примитивную таблицу Id, name
Надо заполнить таблицу строками от 1 до 1000

Циклом все примеры в интернете не рабочие то синтаксис то еще что даже через копирование не работает
Дополнен 3 недели назад
INSERT INTO Persons (id, name) VALUES
(1, 'ASD'), (2, 'ASD'), (3, 'ASD'), ..., (100, 'ASD'); Не работает тоже
Дополнен 3 недели назад
Дали такой но между соткой ошибка
Дополнен 3 недели назад
'), ..., (100, ' В этом месте между скобами ошибка синтаксиса
2 ответа
essepunta Мыслитель (5722) 3 недели назад
CREATE TABLE SimpleTable (
Id INT PRIMARY KEY,
Name NVARCHAR(50)
);

-- Заполняем таблицу
INSERT INTO SimpleTable (Id, Name)
SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Id,
CONCAT('Name ', ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS Name
FROM master.dbo.spt_values a
CROSS JOIN master.dbo.spt_values b;
essepuntaМыслитель (5722) 3 недели назад
CREATE TABLE SimpleTable (
Id INT PRIMARY KEY,
Name VARCHAR(50)
);

-- Заполняем таблицу
INSERT INTO SimpleTable (Id, Name)
WITH RECURSIVE numbers AS (
SELECT 1 AS Id
UNION ALL
SELECT Id + 1
FROM numbers
WHERE Id < 1000
)
SELECT Id, CONCAT('Name ', Id) AS Name
FROM numbers;
n0blemanНовичок (0) 3 недели назад
Не работает ошибка в строке WITH
essepunta Мыслитель (5722) n0bleman, а что за ошибка?
n0blemanНовичок (0) 3 недели назад
Первый тоже не работает
n0blemanНовичок (0) 3 недели назад
Во втором коде выделяется текст WITH
essepunta Мыслитель (5722) n0bleman, так может надо дропнуть таблицу и заново попробовать создать и попробовать выполнить команду?
n0blemanНовичок (0) 3 недели назад
В первом concat as I’d
n0blemanНовичок (0) 3 недели назад
Да драпал
n0blemanНовичок (0) 3 недели назад
n0blemanНовичок (0) 3 недели назад
Второй код выделяет команду WITH
essepuntaМыслитель (5722) 3 недели назад
MySQL старый видать , ниже 8й версии
Попробуй так
 CREATE TABLE SimpleTable ( 
Id INT PRIMARY KEY,
Name VARCHAR(50)
);

-- Создаем временную таблицу
SET @i = 0;

INSERT INTO SimpleTable (Id, Name)
SELECT @i := @i + 1 AS Id, CONCAT('Name ', @i) AS Name
FROM information_schema.COLUMNS
LIMIT 1000;
n0bleman Новичок (0) essepunta, я с ума уже сошел подбираЯ коды
n0blemanНовичок (0) 3 недели назад
Вот теперь сработал почему там много вариаций кода
essepunta Мыслитель (5722) n0bleman, значит я был прав, версия MySQL старая стоит)
n0blemanНовичок (0) 3 недели назад
Вячеслав Рожнев Профи (851) 3 недели назад
Вот решение https://sqlize.online/s/29

 CREATE TABLE Persons (id Int NOT NULL,name VARCHAR(10), val VARCHAR(64)); 

DELIMITER $$
CREATE FUNCTION GeekInc ( value INT )
RETURNS INT
BEGIN
DECLARE inc INT DEFAULT 0;
label:
WHILE inc < value DO
SET inc = inc + 1;
INSERT INTO Persons (id,name,val) VALUES (inc, "ASD","ASD");
END
WHILE label;
RETURN inc;
END; $$
DELIMITER ;

select GeekInc ( 33 );
Похожие вопросы