Бесконечный цикл в хранимой процедуре MS Sql
Всем привет. Помогите пожалуйста довести до ума хранимую процедуру. Задание: написать хранимую процедуру, вставляющую 5 новых строк в таблицу «Издательства. Та процедура, которая у меня получилась, добавляет данные до бесконечности. Таблица:
CREATE TABLE [dbo].[Издательство](
[Код_Издательства] [INT] PRIMARY KEY NOT NULL,
[Название] [VARCHAR](50) NOT NULL,
[Руководитель] [VARCHAR](50) NULL,
[Город] [VARCHAR](30) NULL,
[Телефон] [VARCHAR](15) NULL);
Процедура:
CREATE PROCEDURE [dbo].[resetdata]
@Название VARCHAR (50),
@Руководитель VARCHAR (50),
@Город VARCHAR (30),
@Телефон VARCHAR (15);
@Num INT
AS
IF @Num <> 0
WHILE @Num > 0
BEGIN
INSERT INTO Издательство (Название, Руководитель, Город, Телефон)
VALUES('1','2','3','4')
END;
Вызов хранимой процедуры:
EXEC dbo.resetdata @Num=5, @Название='F', @Руководитель='L', @Город= '12345',
@Телефон='1253666'
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующее решение.
Нет необходимости использовать какой-либо цикл.
SQL
USE tempdb;
GO
DROP TABLE IF EXISTS dbo.Издательство;
CREATE TABLE dbo.Издательство (
Код_Издательства INT IDENTITY PRIMARY KEY,
Название NVARCHAR(50) NOT NULL,
Руководитель NVARCHAR(50) NULL,
Город NVARCHAR(30) NULL,
Телефон VARCHAR(15) NULL
);
GO
DROP PROCEDURE IF EXISTS dbo.resetdata;
GO
CREATE PROCEDURE dbo.resetdata
@Название NVARCHAR (50),
@Руководитель NVARCHAR (50),
@Город NVARCHAR (30),
@Телефон VARCHAR (15)
AS
BEGIN
SET NOCOUNT ON;
;WITH rs AS
(
SELECT @Название AS Название, @Руководитель AS Руководитель, @Город AS Город, @Телефон AS Телефон
)
INSERT INTO Издательство (Название, Руководитель, Город, Телефон)
SELECT Название, Руководитель, Город, Телефон
FROM rs
CROSS JOIN (
SELECT * FROM (VALUES (1), (2), (3), (4), (5)) AS t(c)) v;
END
GO
EXEC dbo.resetdata @Название=N'TASS', @Руководитель=N'Леонид', @Город= N'Рязань', @Телефон='1253770'
-- test
SELECT * FROM Издательство;
Output
+------------------+----------+--------------+--------+---------+
| Код_Издательства | Название | Руководитель | Город | Телефон |
+------------------+----------+--------------+--------+---------+
| 1 | TASS | Леонид | Рязань | 1253770 |
| 2 | TASS | Леонид | Рязань | 1253770 |
| 3 | TASS | Леонид | Рязань | 1253770 |
| 4 | TASS | Леонид | Рязань | 1253770 |
| 5 | TASS | Леонид | Рязань | 1253770 |
+------------------+----------+--------------+--------+---------+