View Full Version : SQL - Como seleccionar todas as tabelas começadas por A?


virtualpraxis
19-06-2006, 18:52
Como posso seleccionar todas as tabelas de uma base de dados MSSQL começadas pela letra 'a'?
Já tentei de variadas formas e nada...

Nota: Creio não ser possivel utilizar wildcards do tipo:
SELECT * FROM a*

Alguma sugestão?

Lostctrl
19-06-2006, 19:16
Boas,

MSSQL não sei, mas em oracle podes fazer isto :

select * from user_objects
where object_type = 'TABLE'
and object_name like 'A%'

Valida se tens uma tabela de controlo chamada user_objects na tua instância.

Abraços

virtualpraxis
19-06-2006, 19:29
Infelizmente ao executar o comando SQL acima obtenho o seguinte erro:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'user_objects'.

Pelos vistos não tenho essa tabela de controlo...

Lostctrl
19-06-2006, 19:40
Boas,

Sim eu tambem pensei q não ia ser assim "chapa 3". Não sei nada de MSSQL mas fiz uma pesquisa rápida e dei com estes comandos :

sp_help

ou

select * from SYSOBJECTS
where TYPE = 'U'
order by NAME

Ve se dá alguma coisa...

virtualpraxis
19-06-2006, 20:48
Damn... já ando desde manhã para tentar resolver isto e tu consegues em menos de 30m dar-me uma grande ajuda. Thumbs up!

Assim... a minha query final seria algo do género:
select * from (select name from SYSOBJECTS where TYPE = 'U' and NAME like 'a%')

mas infelizmente dá erro:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ')'.

estranho... em principio a query está correcta. Não percebo onde está o erro...?

nothing
19-06-2006, 23:46
E só com o

SELECT name FROM SYSOBJECTS WHERE TYPE='U' AND name LIKE 'a%'

não funciona?

virtualpraxis
20-06-2006, 11:50
E só com o
SELECT name FROM SYSOBJECTS WHERE TYPE='U' AND name LIKE 'a%'
não funciona?

Sim sim... executando esse comando dessa forma funciona (quero dizer, não dá erro).

Bom... o que eu tou tentando fazer é: tenho uma base de dados com cerca de 20000 tabelas (!), e ando a tentar exportar essa base de dados de SQL 2005 Express para SQL Server 2000.

Ora, já tentei de tudo para efectuar a exportação pelos métodos normais. Assim e utilizando o utilitário de import/export do SQL Server 2000 (aka DTS) tou a tentar importar as tabelas todas manualmente. Mas... no DTS existe uma opção que dá para usar uma query que selecciona as tabelas que se quer... e é isso mesmo que eu pretendo (penso que a query acima não é válida para o que pretendo).
HELP

inginheiiro
20-06-2006, 12:06
Sim sim... executando esse comando dessa forma funciona (quero dizer, não dá erro).

Bom... o que eu tou tentando fazer é: tenho uma base de dados com cerca de 20000 tabelas (!), e ando a tentar exportar essa base de dados de SQL 2005 Express para SQL Server 2000.

Ora, já tentei de tudo para efectuar a exportação pelos métodos normais. Assim e utilizando o utilitário de import/export do SQL Server 2000 (aka DTS) tou a tentar importar as tabelas todas manualmente. Mas... no DTS existe uma opção que dá para usar uma query que selecciona as tabelas que se quer... e é isso mesmo que eu pretendo (penso que a query acima não é válida para o que pretendo).
HELP

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like 'a%'

em sql server 2000 ou 2005.

/ing

virtualpraxis
20-06-2006, 12:24
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like 'a%'

em sql server 2000 ou 2005.

/ing


Executando o comando acima no DTS (numa opção que diz 'use a query to specify data to transfer') do SQL Server 2000, ele escreve apenas uma tabela nova ('results') com os resultados da query executada (4 colunas - table_catalog, table_schema, table_name, table_type). Nada feito...

inginheiiro
20-06-2006, 12:33
Executando o comando acima no DTS (numa opção que diz 'use a query to specify data to transfer') do SQL Server 2000, ele escreve apenas uma tabela nova ('results') com os resultados da query executada (4 colunas - table_catalog, table_schema, table_name, table_type). Nada feito...

...
1-Eu não sei ao certo o que queres fazer.
2-para o quer que seja que desejas fazer, implica saberes um pouco sobre o motor de BD que tás a usar.
3- a query que coloquei , lista todas as tabelas começadas por A, na BD em utilização.

Exemplo: lista todas as tabelas da BD Northwind começadas por C

SELECT * FROM northwind.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like 'c%'

se usares a query sem especificares a BD (como eu coloquei no 1º post), obviamente vai buscar as tabelas da BD em uso.

outra coisa. esta query que coloquei retorna uma tabela com as seguintes colunas:
table_catalog, table_schema, table_name, table_type

será da tua "responsabilidade" filtrares os table_name que queres usar nos Dts'S.

/ing

virtualpraxis
20-06-2006, 12:57
O que pretendo é efectuar a copia da base de dados do SQL Server 2005 Express para o SQL Server 2000. Sendo que não encontrei outra forma de fazer isso sem ser utilizando o DTS (Data Transformation Service) do SQL Server 2000.

Para uma imagem do que tou a tentar utilizar ver a seguinte página:
http://www.databasejournal.com/features/mssql/article.php/10894_1963091_8

inginheiiro
20-06-2006, 13:28
O que pretendo é efectuar a copia da base de dados do SQL Server 2005 Express para o SQL Server 2000. Sendo que não encontrei outra forma de fazer isso sem ser utilizando o DTS (Data Transformation Service) do SQL Server 2000.

Para uma imagem do que tou a tentar utilizar ver a seguinte página:
http://www.databasejournal.com/features/mssql/article.php/10894_1963091_8

ok.
não te posso ajudar sobre este topico, pois não sou DBA.
se a tua BD for muito grande, então isso é um bico de obra, pois pelo que percebo os DTS preservam todas as propriedades da BD (logins,permissões,indices, etc etc etc).

uma abordagem + simplista seria extraires para um ficheiro ascii o schema da BD.
alterar o ficheiro para executar em sql server 2000.
correr o schema no 2000.

obviamente perderias algumas das propriedades...

/ing

virtualpraxis
20-06-2006, 13:40
ok... tou mesmo pensando seguir o que sugeres.
Agora... utilizando o MS SQL Server Management Studio Express como consigo fazer a exportação para ficheiro?

XiriX
23-06-2006, 02:48
Não sou DBA mas trabalho do MSSQL todos os dias, e se queres copiar a BD de SQL 2k5 para SQL 2K consegues fazer isso na boa com o DTS. Tens uma opção de copy database. A espiga é que se vais com o entreprise manager, que é a tool do MSSQL 2K, é possivél que não consigas, pq o SQL 2K5 tem propriedades novas que não são copiaveis para uma BD MSSQL 2K. Convém usares o SQL Management Studio, que é a tool do SQL 2K5 e se fizeres a cópia/downgrade para SQL 2K, ele deve saber o que fazer.

O processo é simples, tens os dois servidores de BD no mesmo PC ou em PCs diferentes. Se for no mesmo PC, deves ter duas instâncias, uma para o SQL 2K5 e outra para o SQL 2K. Abres uma das instâncias, utilizas o DTS. Defines o source, e o target. Especificas se queres cópia integral da BD, ou só estrutura das tabelas, ou só dados, etc etc. O que quiseres, e depois metes a executar a cópia e siga.


Abraços
X|r|X