Simpel stored procedure vraagje

Status
Niet open voor verdere reacties.

TSAR

Gebruiker
Lid geworden
20 mei 2009
Berichten
158
Ik ben absoluut een leek in stored procedure, dus "don't shoot me" :eek:

Ik maak een SP en bij het runnen krijg ik mooi "Command(s) completed successfully.".

Nu wens ik deze eens uit te proberen via "Execute stored procedure" teneinde te zien of ik wel de juiste rijen verkrijg, maar daar krijg ik de fout "Must declare the scalar variable "@EmpID""

Kan iemand mij zeggen wat in onderstaande SP verkeerd is ?
[sql]
USE [db_ttl]
GO
/****** Object: StoredProcedure [dbo].[stp_GetPresRecords] Script Date: 21/05/2014 16:16:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[stp_GetPresRecords]
@Tabelnaam sysname,
@EmpID As int,
@Van As datetime,
@Tot As datetime,
@Volgorde as nvarchar = null
As
BEGIN
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = 'SELECT * FROM ' + QUOTENAME(@Tabelnaam ) +
' WHERE 1=1'

SET @sql = @sql + ' AND Pres_EmpID = @EmpID'

SET @sql = @sql + ' AND Pres_Date >= @Van and Pres_Date <= @Tot'

IF @Volgorde IS NULL
SET @sql = @sql + ' ORDER BY Pres_EmpID, Pres_Date, Pres_Comment, Pres_ID'
ELSE
SET @sql = @sql + ' ORDER BY @Volgorde'

PRINT (@sql)
EXEC (@sql)

END
[/sql]


Alvast bedankt !!
 
Laatst bewerkt door een moderator:
De variabele EmpID is een Integer en die probeer je in een String variabele te proppen. Dat kan wel maar dan moet je wel de Integer converteren naar een String. Probeer het eens zo:
Code:
SET @sql = @sql + ' AND Pres_EmpID = ' + CONVERT(VARCHAR(12), @EmpID)

Hoe dat met de datetime velden werkt moet je zelf even opzoeken.
Kijk bijvoorbeeld eens naar de DATE_FORMAT en CAST functies.
 
Laatst bewerkt:
Bedankt edmoor, ik ben eruit !

Nog één vraagje : is het goed idee om de stored procedure zo algemeen te schrijven, dat je bv. het gedeelte select (welke items wens je als resultaat), het gedeelte filter (aan welke selectie moet er voldaan worden) en de volgorde (de SORT) als parameters kunt doorgeven ?
 
Een SP in SQL is eigenlijk hetzelfde als een functie in een programmeertaal. Daarbij gaat het altijd om de afweging tussen functionaliteit en herbruikbaarheid. Als je hem dus maar 1 keer in je project nodig hebt zou ik er niet zo moeilijk om doen en voor functionaliteit kiezen. Daarnaast gaat het er natuurlijk om hoe je hem uiteindelijk aan de gebruiker ter beschikking wilt stellen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan