Usuário com melhor resposta
Procedure retornando valores de varios select's

Pergunta
-
Tenho que contar linhas de várias tabelas, e resolvi fazer os select's na mesma procedure.
Ex.: select count(*) as cont1 from tbl1
select count(*) as cont2 from tbl2
select count(*) as cont3 from tbl3
select count(*) as cont4 from tbl4
mas está dando errado!
alguem pode me ajudar?
Respostas
-
Leticia, crie uma tabela temporátia ou uma variavel "table" com 4 campos ou com 1 campo mesmo, faça o insert do resultado desse Count nessa tabela e ao final faça um select da tabela temporária para o retorno da proc.
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco- Marcado como Resposta LeticiaAmorim quarta-feira, 2 de junho de 2010 14:10
-
Galera.. resolvii...
agradeço a colaboração de todos!!
Esse select monta uma linha com cada select que eu preciso organizado em uma coluna.
Pode não ser a melhor forma, mas resolveu meu problema!!
**Valeu FAUSTOOO eu tentei fazer uma temporaria, mas achei essa solução aí!
SELECT
(
SELECT
count(*)
FROM
tabela1
WHERE
cod = @cod1
) as contTabela1,
(
SELECT
count(*)
FROM
tabela2
WHERE
cod = @cod2
) as contTabela2,
(
SELECT
count(*)
FROM
tabela3
WHERE
cod = @cod3
) as contTabela3,
(
SELECT
count(*)
FROM
tabela4
WHERE
cod = @cod4
) as contTabela4,
(
SELECT
count(*)
FROM
tabela5
WHERE
cod = @cod5
) as contTabela5,
(
SELECT
count(*)
FROM
tabela6
WHERE
cod = @cod6
) as contTabela6
- Marcado como Resposta LeticiaAmorim quarta-feira, 2 de junho de 2010 14:10
Todas as Respostas
-
Leticia, crie uma tabela temporátia ou uma variavel "table" com 4 campos ou com 1 campo mesmo, faça o insert do resultado desse Count nessa tabela e ao final faça um select da tabela temporária para o retorno da proc.
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco- Marcado como Resposta LeticiaAmorim quarta-feira, 2 de junho de 2010 14:10
-
Se for no SQL Server 2005 ou 2008, tente rodar essa query abaixo que retorna a quantidade de registro de uma tabela:
SELECT t.[name], p.[rows]
FROM
sys.schemas s
INNER JOIN sys.tables t ON t.[schema_id] = s.[schema_id]
INNER JOIN sys.indexes i ON i.[object_id] = t.[object_id] AND i.[type] IN (0,1)
INNER JOIN sys.partitions p ON p.[object_id] = t.[object_id] AND p.[index_id] = i.[index_id]
where
t.name in ('tbl1','tbl2','tbl3','tbl4')
ORDER
BY p.[rows] desc
Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/ -
Fabricio, depende muito das permissões de usuário para poder ler as tabelas/views de sistema. Levando em conta sempre o cenário mais restritivo, um usuario utilizado por um sistema/site para acesso ao banco nunca deveria ter acesso a estas tabelas/views .
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco -
Letícia,
Vamos ser mais práticos, qual é o erro?
Talvez criar um procedure para isso poderá ser desnecessário, mas vamos analisar!!!!
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Fala Fausto, é que não foi dito onde seria utilizado...
Se ela for a Administradora de lá e ela mesma precisa obter essa informação, vizualizar nos metadados seria menos custoso...
Mas é como vc disse, depende do usuário que executará as procedures e onde o procedimento será utilizado.
Fabrício França Lima | MCP, MCTS, MCITP | Visite meu site: http://fabriciodba.spaces.live.com/ -
Galera.. é o seguinte..
eu to fazendo um sistema de tombo.
Que guarda os registros das tabelas, em tabelas de historico.
O usuário do sistema tem que ver uma tabela com as seguintes colunas.
Nome da tabela, qtd de linhas, tombar, limpar.
são 12 tabelas, e eu preciso retornar o número de linhas para que o usuario veja quantas linhas tem a tabela que ele quer tombar.
Acredito que a ideia da tabela temporaria é boa, mas se alguem tiver alguma outra...
***Eu queria saber porque a minha prc não funciona tbm!
-
Letícia,
Entendi a sua necessidade, mas qual é a mensagem de erro que o SQL Server esta retornando?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
-
-
Leticia, o assundo pode não ser o mesmo, mas tem algums pontos que podem te ajudar:
http://faustobranco.spaces.live.com/blog/cns!5EA93520A3B2FB10!2235.entry
http://faustobranco.spaces.live.com/Blog/cns!5EA93520A3B2FB10!2233.entry
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco -
Letícia,
Você poderia postar toda a estrutura do seu código e mensagem de erro?
Sem esses detalhes fica complicado ajudar, senão vamos ficar enchendo este post de respostas desnecessárias.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
SELECTcount(*) as contTabela1FROMtabela1WHEREcod = @cod1
SELECTcount(*) as contTabela2FROMtabela2WHEREcod = @cod2
SELECTcount(*) as contTabela3FROMtabela3WHEREcod = @cod3
SELECTcount(*) as contTabela4FROMtabela4WHEREcod = @cod4
SELECTcount(*) as contTabela5FROMtabela5WHEREcod = @cod5SELECTcount(*) as contTabela6FROMtabela6WHEREcod = @cod6
Aparece o seguinte erro:
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
Na página eu tenho apenas rs("contTabela1"),rs("contTabela2"),rs("contTabela3") ...
Os selects na procedure são assim mesmo, um abaixo do outro, eu rodo no banco e funciona legal!Quando eu vou recuperar via asp não aparece.Eu apaguei os selects da procedure e deixei apenas um, e não obtive erro na página, o número de linhas apareceu normalmente.
-
Era por isso que eu comentei para colocar tudo em uma tabela temporaria e retornar um unico select. O recordset não vai funcionar para varios retornos de selects distintos em uma unica chamada de SP.
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco -
Galera.. resolvii...
agradeço a colaboração de todos!!
Esse select monta uma linha com cada select que eu preciso organizado em uma coluna.
Pode não ser a melhor forma, mas resolveu meu problema!!
**Valeu FAUSTOOO eu tentei fazer uma temporaria, mas achei essa solução aí!
SELECT
(
SELECT
count(*)
FROM
tabela1
WHERE
cod = @cod1
) as contTabela1,
(
SELECT
count(*)
FROM
tabela2
WHERE
cod = @cod2
) as contTabela2,
(
SELECT
count(*)
FROM
tabela3
WHERE
cod = @cod3
) as contTabela3,
(
SELECT
count(*)
FROM
tabela4
WHERE
cod = @cod4
) as contTabela4,
(
SELECT
count(*)
FROM
tabela5
WHERE
cod = @cod5
) as contTabela5,
(
SELECT
count(*)
FROM
tabela6
WHERE
cod = @cod6
) as contTabela6
- Marcado como Resposta LeticiaAmorim quarta-feira, 2 de junho de 2010 14:10