Tworzenie procedury. Procedura się tworzy ale nie wypełnia tabeli

0

Witam mam problem z zrobieniem podstawowego kroku z książki do nauki podstaw hurtowni danych.
Zadanie polega na stworzeniu tabeli CzasSt

CREATE TABLE CzasSt (
	Data date NOT NULL PRIMARY KEY,
	Dzien numeric(2) NOT NULL,
	Miesiac numeric(2) NOT NULL,
	Kwartal numeric(1) NOT NULL,
	Rok numeric(4) NOT NULL,
	DzienTygodnia numeric(1) NOT NULL,
	NazwaMiesiacaPolska varchar(50) NOT NULL,
	NazwaMiesiacaAngielska varchar(50) NOT NULL,
	NazwaDniaTygodniaPolska varchar(50) NOT NULL,
	NazwaDniaTygodniaAngielska varchar(50) NOT NULL
)
 

Tabele stworzyłem wszystko jest ok
Następnie trzeba stworzyć procedurę która wypełni tabelę CzasSt

CREATE PROCEDURE [dbo].[WstawCzas]
AS
DECLARE @korektor INT
DECLARE @data DATE
DECLARE @pnm VARCHAR(30),@anm VARCHAR(30), @ant VARCHAR(30),@pnt VARCHAR(30)
SELECT @korektor = 0
WHILE @korektor<730 -2
BEGIN SELECT @data = DATEADD(DAY, @korektor, '2010-01-01')
IF DATEPART(MM,@data)=1 SELECT @pnm='Styczeń', @anm='January'
ELSE IF DATEPART(MM,@data)=2 SELECT @pnm='Luty', @anm='February'
ELSE IF DATEPART(MM,@data)=3 SELECT @pnm='Marzec', @anm='March'
ELSE IF DATEPART(MM,@data)=4SELECT @pnm='Kwiecień', @anm='April'
ELSE IF DATEPART(MM,@data)=5 SELECT @pnm='Maj', @anm='May'
ELSE IF DATEPART(MM,@data)=6 SELECT @pnm='Czerwiec', @anm='June'
ELSE IF DATEPART(MM,@data)=7 SELECT @pnm='Lipiec', @anm='July'
ELSE IF DATEPART(MM,@data)=8 SELECT @pnm='Sierpień', @anm='August'
ELSE IF DATEPART(MM,@data)=9 SELECT @pnm='Wrześień', @anm='September'
ELSE IF DATEPART(MM,@data)=10 SELECT @pnm='Październik', @anm='October'
ELSE IF DATEPART(MM,@data)=11 SELECT @pnm='Listopad', @anm='November'
ELSE SELECT  @pnm='Grudzień', @anm='December'
IF DATEPART(W,@data)=1 SELECT @pnm='Niedziela', @anm='Sunday'
ELSE IF DATEPART(W,@data)=2 SELECT @pnm='Poniedziałek', @anm='Monday'
ELSE IF DATEPART(W,@data)=3 SELECT @pnm='Wtorek', @anm='Tuesday'
ELSE IF DATEPART(W,@data)=4 SELECT @pnm='Środa', @anm='Wednesday'
ELSE IF DATEPART(W,@data)=5SELECT @pnm='Czwartek', @anm='Thursday'
ELSE IF DATEPART(W,@data)=6 SELECT @pnm='Piątek', @anm='Friday'
ELSE SELECT  @pnm='Sobota', @anm='Saturday'
INSERT INTO CzasSt VALUES(@data, DATEPART (DAY, @data), DATEPART(MM,@data),
DATEPART(QQ,@data),DATEPART(YEAR,@data),DATEPART(W,@data),@pnm,@anm,@pnt,@ant)
SELECT @korektor = @korektor+ 1
END
 

W załączniku dodaje zrzut z MVS
z ustawieniami Execute SQL Task w Control Flow
W połączeniu (Connection) mam na pewno wybraną bazę z tabelą CzasSt
Kolejny załącznik prezętuje model Execute SQL Task powinien usuwać wszystko z tabeli CzasSt a Execute SQL Task Wstaw Czas dodaje procedurę i powinien wypełnić tabele CzasSt
Problem jest w tym że procedura się tworzy w folderze Stored Procedures ale tak jak by się nie wywoływała ponieważ nie uzupełnia mi tabeli CzasSt.
Prosze o pomoc czy procedura jest źle napisana, czy może coś innego robię źle

0

Gdybyś ponazywał zmienne po ludzku to sam byś znalażł błąd, popatrz dobrze pod jakie zmienne podstawiasz dni tygodnia.
Zaopatrz się w Management Studio, ułatwia życie.

0

Niestety zmienne były w książce tak opisane wiec chciałem odwzorować 1:1 no i z lenistwa kopiowałem i wklejałem pierwszą linie zmieniając numery itp a zmiennych nie zmieniłem, ale niestety po zmianie nadal jest to samo mi się wydaje że nawet z tamtymi zmiennymi powinno do bazy się coś dodać najwyżej zamiast miesięcy były by dni ale nie powinna być pusta.
@data jest z dużej ale tylko na forum w zapytaniu mam @data
Posiadam Server Managment studio i błąd z użyciem zmiennych nie był podkreślany procedura normalnie zakończona sukcesem (połowicznym ) bo wciąż mam pustą tabele CzasSt
Dodaje zrzut z informacją o pomyślnym zakończeniu zapytania
W lini

CREATE PROCEDURE [dbo].[WstawCzas]
 

Jest komunikat there is already an object named in the database ale jak widać na screenie że procedura została już stworzona więc sądzę że dla tego jest podkreślone

Jeśli możesz zerknąc na zapytanie które mam teraz

 
CREATE PROCEDURE [dbo].[WstawCzas]
AS
DECLARE @korektor INT
DECLARE @data DATE
DECLARE @pnm VARCHAR(30),@anm VARCHAR(30), @ant VARCHAR(30),@pnt VARCHAR(30)
SELECT @korektor = 0
WHILE @korektor<730 
BEGIN SELECT @data = DATEADD(DAY, @korektor, '2010-01-01')
IF DATEPART(MM,@data)=1 SELECT @pnm='Styczeń', @anm='January'
ELSE IF DATEPART(MM,@data)=2 SELECT @pnm='Luty', @anm='February'
ELSE IF DATEPART(MM,@data)=3 SELECT @pnm='Marzec', @anm='March'
ELSE IF DATEPART(MM,@data)=4SELECT @pnm='Kwiecień', @anm='April'
ELSE IF DATEPART(MM,@data)=5 SELECT @pnm='Maj', @anm='May'
ELSE IF DATEPART(MM,@data)=6 SELECT @pnm='Czerwiec', @anm='June'
ELSE IF DATEPART(MM,@data)=7 SELECT @pnm='Lipiec', @anm='July'
ELSE IF DATEPART(MM,@data)=8 SELECT @pnm='Sierpień', @anm='August'
ELSE IF DATEPART(MM,@data)=9 SELECT @pnm='Wrześień', @anm='September'
ELSE IF DATEPART(MM,@data)=10 SELECT @pnm='Październik', @anm='October'
ELSE IF DATEPART(MM,@data)=11 SELECT @pnm='Listopad', @anm='November'
ELSE SELECT  @pnm='Grudzień', @anm='December'
IF DATEPART(W,@data)=1 SELECT @pnt='Niedziela', @ant='Sunday'
ELSE IF DATEPART(W,@data)=2 SELECT @pnt='Poniedziałek', @ant='Monday'
ELSE IF DATEPART(W,@data)=3 SELECT @pnt='Wtorek', @ant='Tuesday'
ELSE IF DATEPART(W,@data)=4 SELECT @pnt='Środa', @ant='Wednesday'
ELSE IF DATEPART(W,@data)=5 SELECT @pnt='Czwartek', @ant='Thursday'
ELSE IF DATEPART(W,@data)=6 SELECT @pnt='Piątek', @ant='Friday'
ELSE SELECT  @pnt='Sobota', @ant='Saturday'
INSERT INTO CzasSt VALUES(@data, DATEPART (DAY, @data), DATEPART(MM,@data),
DATEPART(QQ,@data),DATEPART(YEAR,@data),DATEPART(W,@data),@pnm,@anm,@pnt,@ant)
SELECT @korektor = @korektor+ 1
END
0

Ponieważ pod zmienne dotyczące dni tygodnia nic nie podstawiałeś były one NULL a pola w tabeli masz zadeklarowane jako NOT NULL.
Jeżeli masz Management Studio to po prostu uruchom procedurę poleceniem EXECUTE NazwaBazy.dbo.WstawCzas, wypisze Ci błedy, obstawiam że chodzi o literówkę tu -> ELSE IF DATEPART(MM,@data)=4SELECT @pnm='Kwiecień', @anm='April'

0

Procedurka jest ok (poza oczywiście tą literówką) a pod dni tygodnia oczywiście są podstawiane wyniki tych długaśnych if elsów. Powinno działać.

0

Zaznaczyłem poprawną odpowiedz. Procedura się tworzyła ale ja jej nie wywoływałem w książce było żeby w polu SQL Statment wpisać exec dbo.WstawCzas i niestety to polecenie nie działało dopiero po podpowiedzi wpisałem Execute dbo.WstawCzas i zadziałało nie musiałem podawać nazwy bazy danych bo w visualu miałem już ją zdefiniowaną. Bardzo dziękuję za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1