[SQL] Incorrect syntax near '('. na SQL Server 2008


(Marcin86s) #1

Kod procedury:

CREATE PROCEDURE dodaj_piwo

	@producent_id int,

	@nazwa varchar (30),

	@dodano datetime = getdate()

AS

BEGIN

	INSERT INTO piwa (producent_id, nazwa)

	VALUES (@producent_id, @nazwa)

	RETURN @@ERROR

END

go


EXECUTE dodaj_piwo 1, 'Harnaś Mocny'

EXEC dodaj_piwo 1, 'Karpackie Mocne'

go

Błąd:

Wygląd tabeli:

CREATE TABLE [dbo].[piwa](

	[id] [int] IDENTITY(1,1) NOT NULL,

	[producent_id] [int] NOT NULL,

	[nazwa] [varchar](30) NULL,

	[dodano] [datetime] NULL,

Co robię źle?


(Grzelix) #2

dwie rzeczy przychodzą mi do głowy

  1. nie potrzebna spacja pomiędzy nazwą typu a wartością

czyli powinno być varchar(30).

  1. Pierwszy raz spotykam się aby nazwy typów były objęte klamrami.

Jeśli już tak można to pewnie powinno to wyglądać tak [varchar(30], gdyż to jest pełna nazwa typu.

Nie mam możliwości przetestowania tego, dlatego mówię że jest to sugestia (nie rozwiązanie).


(Marcin86s) #3

To nie ma żadnego wpływu.

To kod wygenerowany przez SQL Server, ma na celu pokazać tylko strukturę tabeli. :stuck_out_tongue:


(Grzelix) #4

Troszkę się zgubiłem w twoim pierwszym poście, teraz już widzę o co chodzi. Wygląda na to że ustawienie obecnej daty jako parametru opcjonalnego jest problematyczne:

http://social.msdn.microsoft.com/forums ... 7651723fa5

http://social.msdn.microsoft.com/Forums ... 981a3f478f

z drugiej zaś strony nie wykorzystujesz tej zmiennej nigdzie dalej. Nie wiem czy to dlatego że podałeś tylko wycinek procedury, bo jeśli nie to po prostu usuń ten parametr.