create view met variabelen erin is dat mogelijk?

Status
Niet open voor verdere reacties.

jeroenSturm

Gebruiker
Lid geworden
2 mei 2012
Berichten
197
ik heb code om de data op te roepen zoals ik dat wil maar nu wil ik dat in een view zetten en dat kan dus niet met variabelen iemand enig idee hoe het wel kan??? hierbij de code

CODE:
[sql]DECLARE @totalRecords INT
DECLARE @I INT

SELECT @I = 1

SELECT @totalRecords = COUNT([Id]) FROM [dbo].[Werkzaamheden]

WHILE (@I <= @totalRecords)

BEGIN

SELECT
U.[Id]
, G.[Naam]
, W.[Omschrijving]
, U.[datum]
, CONVERT(VARCHAR,100)+'%' AS 'Status'
, W.[Norm]
, W.Id

FROM [Werkzaamheden] W
RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]= 1 AND W.Id = @I

UNION

SELECT
U.[Id]
, G.[Naam]
, W.[Omschrijving]
, U.[datum]
, CONVERT(VARCHAR,0)+'%' AS 'Status'
, W.[Norm]
, W.Id
FROM [Werkzaamheden] W
LEFT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]= 0 AND W.Id = @I

UNION

SELECT
U.[Id]
, G.[Naam]
, W.[Omschrijving]
, U.[datum]
, null AS 'Status'
, '' AS Norm
, W.Id
FROM [Werkzaamheden] W
RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]IS NULL

SELECT @I = @I + 1

END[/sql]
wat is de beste oplossing ?

dit is het resultaat (met fictieve data):

Code:
Id                Naam    Omschrijving    datum   Status  Norm    Id
NULL            Johan       NULL            NULL      NULL    0        NULL
8                  Piet         Luisteren    2013-05-14  0%  95         3
9                  Klaas       Luisteren   2013-05-16  100%    95    3
13                 Klaas      Luisteren   2013-05-17  0%  95           3
14                  Janneke Luisteren   2013-05-17  100%    95     3
--------------------------------------------------------------------------------
Id         Naam    Omschrijving    datum            Status  Norm    Id
NULL     Johan    NULL                NULL              NULL      0      NULL
4          Janneke Schoonmaken   2013-05-14     100%    20    2
5          Jan        Schoonmaken   2013-05-14     0%       20     2
10        Piet        Schoonmaken   2013-05-16    100%    20     2
11        Janneke Schoonmaken   2013-05-16    100%    20     2
12        Piet        Schoonmaken  2013-05-17     100%    20     2


als er onduidelijk heden zijn hoor ik die wel !?
 
Laatst bewerkt door een moderator:
Wat jij wilt doen ziet er meer uit als een storedprocedure of -function, wellicht is dat een beter optie?
 
hmm zou een mooie oplossing kunnen wezen maar wat moet ik dan als parameter meegeven want dat snap ik niet helemaal ?
 
Als ik het zo snel zie geeft je alle variabelen binnen de query een waarde dus je zou in een stored function gewoon geen parameters mee hoeven geven.
 
bij dit (zie code)
krijg ik een fout op mijn AS daar zegt hij :

en als ik hem run krijg ik dit
Msg 111, Level 15, State 1, Line 3
'CREATE FUNCTION' must be the first statement in a query batch
Code:
USE twijnentest

CREATE function dbo.[selecteer_alles] AS
BEGIN
DECLARE @totalRecords INT
DECLARE @I INT

SELECT @I = 1
 
SELECT @totalRecords = COUNT([Id]) FROM [dbo].[Werkzaamheden]
 
WHILE (@I <= @totalRecords)
 
BEGIN
 
SELECT 
	U.[Id]
	, G.[Naam]
	, W.[Omschrijving]
	, U.[datum]
	, CONVERT(VARCHAR,100)+'%' AS 'Status'
	, W.[Norm]
	, W.Id

FROM [Werkzaamheden] W
		RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
		FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]= 1 AND W.Id = @I

UNION 

SELECT 
	U.[Id]
	, G.[Naam]
	, W.[Omschrijving]
	, U.[datum]
	, CONVERT(VARCHAR,0)+'%' AS 'Status'
	, W.[Norm]
	, W.Id
FROM [Werkzaamheden] W
		LEFT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
		FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]= 0 AND W.Id = @I

UNION

SELECT 
	U.[Id]
	, G.[Naam]
	, W.[Omschrijving]
	, U.[datum]
	, null AS 'Status'
	, '' AS Norm
	, W.Id
FROM [Werkzaamheden] W
		RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */
		FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam]

WHERE U.[Status]IS NULL 
 
    SELECT @I = @I + 1
 
END
END
 
Ik ben niet bekent met de database die je gebruikt, maar de foutmelding lijkt me duidelijk; je mag geen USE gebruiken voor de CREATE. Dat kan zijn omdat je geen puntkomma achter de USE regel hebt staan, maar dat zal afhangen van de syntax van de database die je gebruikt.
 
Kort googlen leert dat daar inderdad een puntkomma achter de use regel moet, maar ik zie nog meer verschillen met wat jij doet, is dit de eerste keer dat je een procedure maakt? Want in dat geval lijkt het me verstandig om eerst een paar tutorials te lezen over hoe het werkt. IK weet te weinig van SQLserver om je op een zinnige manier verder te helpen.
 
ja de eerste keer, maar gegoogled heb ik al genoeg ik heb alles geprobeerd daarna ben ik naar het forum gekomen omdat ik er niet uitkwam. maar bedankt voor de informatie
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan