PDA

Visualizza la versione completa : [SQL SERVER] Problema su store Procedure


m_felici
07-01-2010, 11:12
Buongiorno a tutti, premetto che non sono molto esperto di SQL quindi vi chiedo un po di comprensione.

Il problema č il seguente.

Devo inserire in una variabile il risultato di una select con il nome della tabella variabile.

Ho iniziato con questa procedura



DECLARE @nErrori INT
SET @nErrori=0
SET @nErrori= (SELECT COUNT(*) FROM TABELLA)


Ho poi sostituito la select con un EXEC di una stringa di testo, dove all'interno compongo la stringa sql per verificare che tutto funzioni



DECLARE @SQL NVARCHAR(MAX)
DECLARE @NomeTabella NVARCHAR(MAX)

SET @NomeTabella = 'Tabella'
SET @SQL = 'select count(*) from ' + @NomeTabella

exec (@SQL)



Fino a questo punto tutto ok

Ora la mia domanda č come faccio a mettere il risultato della count all'interno di @nErrori?

Ho provato decine di modi ma niente mi da sempre errore.

Sono a disposizione per eventuali chiarimenti

Help me

Buon Anno

Marco

ybla82
08-01-2010, 09:51
ciao, io ci sono riuscito passando tramite una tabella temporanea.




DECLARE @SQL NVARCHAR(MAX)
DECLARE @NomeTabella NVARCHAR(MAX)
DECLARE @nErrori INT
DECLAre @tempT TABLE
( nErrors int)


SET @nErrori=0
SET @NomeTabella = 'Tabella'
SET @SQL = 'select count(*) from ' + @NomeTabella

INSERT INTO @tempT exec(@SQL)

SET @nErrori = (SELECT nErrors FROM @tempT);

soledue
09-01-2010, 23:45
DECLARE @SQL NVARCHAR(MAX)
DECLARE @NomeTabella NVARCHAR(MAX)
DECLARE @nErrori INT
SET @nErrori=0

SET @NomeTabella = 'Tabella'
SET @SQL = 'select @nErrori=count(*) from ' + @NomeTabella

exec (@SQL)

m_felici
11-01-2010, 17:49
X ybla82
Si anche io per ora uso una tab. di passaggio dati, cercavo un modo pių "pulito" per risolvere il problema.

X soledue
Per quanto riguarda l'ultimo caso purtroppo non funziona, mi da il seguente errore:

Ho scordato di scrivere che sto lavorando in Windows Server 2003 con SQL Server 2005 SP3




Messaggio 137, livello 15, stato 1, riga 1
Must declare the scalar variable "@nErrori".

soledue
11-01-2010, 23:01
pių elegante di cosė :-)

DECLARE @SQL NVARCHAR(MAX)
DECLARE @NomeTabella NVARCHAR(MAX)
DECLARE @Parms NVARCHAR(500);
DECLARE @nErroriOut INT

SET @NomeTabella = 'Tabella';
SET @Parm = N'@nErrori INT OUTPUT';
SET @SQL = N'SELECT @nErrori=COUNT(*) FROM ' + @NomeTabella;
EXECUTE sp_executesql @SQL, @Parm, @nErrori=@nErroriOut OUTPUT;
SELECT @nErroriOut

Loading