Tjena, Det gör du inte. Okej, har du några förslag på hur en sådan fråga skulle se ut? CREATE PROCEDURE ProcGetStuff Du kan använda Union : Gjorde en SP som ser ut som följer: Så här skulle du kunna göra. Använd en tabellvariabel så underlättar det. Du kan välja om du vill ha det som ett resultatset eller som kommaseparerad sträng. Du måste deklarera parametrarna och skicka med dem.Flera select i en SP?
Skulle vilja ställa flera frågor i en StoredProcedure och få svaren tillbaka i en kommaseparerad sträng.
Typ:
-- hur många som inte har aktiverat sig
select count(uid)
from subscription
where activationdate is NULL
-- hur många som är aktiva
select count(uid)
from subscription
where lastmessage > 0
returnerar 4, 21
förstår ni?
Hur gör man detta?Sv: Flera select i en SP?
Du kan få tillbaks svaren som:
A. Parametrar till proceduren
B. Ett normalt resultatset
C. En parameter eller resultat som består av endast en kolumn med din kommaseparerade sträng
Ordningen på förslagen är rekommenderad "brahetsordning"
/mickeSv: Flera select i en SP?
.LasseSv: Flera select i en SP?
@a int OUTPUT, @b int OUTPUT
AS
select @a = count(uid)
from subscription
where activationdate is NULL
select @b = count(uid)
from subscription
where lastmessage > 0
GO
/mickeSv: Flera select i en SP?
SELECT Count(a) AS Antal FROM TabellA
UNION
SELECT Count(b) AS Antal FROM TabellB
...
UNION
SELECT Count(x) AS Antal FROM TabellX
Så länge kolumnlistorna på varje SQL-sats matchar varandra när det gäller datatypen så fungerar UNION bra för detta. Resultatet blir alltså x rader i ett datset/recordset med en kolumn (som heter Antal).
/Per
Sv: Flera select i en SP?
CREATE PROCEDURE Spam_GetStats
@intTotal int OUTPUT,
@intActive int OUTPUT,
@intFirst int OUTPUT,
@intDone int OUTPUT,
@intNoActive int OUTPUT
AS
-- hur många sammanlagda prens
select @intTotal = count(uid)
from subscription
-- hur många som är aktiva
select @intActive = count(uid)
from subscription
where lastmessage < 15 and lastmessage > 0
-- hur många som väntar på att få första mejlet
select @intFirst = count(uid)
from subscription
where activationdate is not NULL
and Lastmessage = 0
-- hur många som är färdiga
select @intDone = count(uid)
from subscription
where lastmessage = '15'
-- hur många som inte har aktiverat sig
select @intNoActive = count(uid)
from subscription
where activationdate is NULL
GO
Får ett fel när jag försöker köra den,
Procedure 'Spam_GetStats' expects parameter '@intTotal', which was not supplied.
.LasseSv: Flera select i en SP?
DECLARE @tblCount TABLE
(
not_active BIGINT,
active BIGINT
)
-- hur många som inte har aktiverat sig
INSERT
INTO @tblCount
( not_active)
SELECT COUNT(uid)
FROM subscription
WHERE activationdate IS NULL
-- hur många som är aktiva
UPDATE @tblCount
SET active = (
SELECT COUNT(uid)
FROM subscription
WHERE lastmessage > 0)
-- Välj att antingen få som resultatset
SELECT *
FROM @tblCount
-- Eller att få som kommaseparerad sträng
SELECT CAST(not_active AS VARCHAR(16)) + ',' + CAST(active AS VARCHAR(16))
FROM @tblCount
/Peter
Sv: Flera select i en SP?
Såhär gör du inifrån Query Analyzer (SQL Server)
DECLARE @a int
DECLARE @b int
DECLARE @c int
DECLARE @d int
DECLARE @e int
EXEC Spam_GetStats @a OUTPUT,@b OUTPUT,@c OUTPUT,@d OUTPUT,@e OUTPUT
/micke