MS SQL Server 2008 - Confusão na migração de MySQL re: “selecione XYZ da tabela”
-
03-07-2019 - |
Pergunta
Então, eu só estou confuso aqui.
Eu tenho que migrar meu banco de dados do MySQL para MS SQL Server 2008. Eu já transferiu os dados por meio do app "Assistente de dados MS SQL" do SQL Maestros. Levou os dados + estrutura do meu banco de dados MySQL "gk" e copiados-lo em um banco de dados "gk" no meu exemplo MS SQL Express.
Mas quando eu ligar a instância MS SQL e tentar executar uma consulta SQL, eu só obter resultados quando eu executar "select * from gk.TABLENAME
" ou "select * from gk.gk.TABLENAME
" ... Se eu executar "select * from TABLENAME
" depois de executar "use gk
", I obter:
Erro: Nome de objecto inválido 'TABLENAME'
SQLState: S0002
Código de erro: 208
Como posso fazer isso se comportam "normalmente"? Ou seja, eu conectar a um banco de dados específico, que eu não tenho que lhe dizer isso explicitamente em qual banco de dados / esquema para encontrar a mesa?
UPDATE: I deverá especificar a estrutura que foi criado pelo aplicativo Assistente de dados SQL. Olhando para a árvore de objetos do navegador no SQL Server Management Studio, há esta:
[HOSTNAME]\SQLEXPRESS (SQL Server ...)
|-- Databases
|-- System Databases
|-- gk
|...
|-- Tables
|-- TABLE1
|-- TABLE2
|-- TABLE3
... e assim por diante.
Graças. -dan
Solução
Na caixa de diálogo Propriedades de Login para o seu usuário há uma página "Mapeamento de Usuário", onde você pode definir o esquema padrão do usuário. Definindo-o como "gk" (no banco de dados "gk") deve permitir que você escrever consultas sem qualificar totalmente as tabelas.
Outras dicas
Tente isso, se você já não o fez:
USE gk
GO
SELECT * FROM tablename
Parece que o assistente criou um banco de dados chamado de "gk", e em seguida, colocar todas as tabelas em um esquema intitulado "gk".
Se existirem as tabelas em um esquema chamado (ou seja, algo além do esquema padrão de "dbo"), então você sempre terá de especificar o esquema ao consultar-lo.
NOTA: Em algumas situações, há uma penalidade de desempenho significativo para não especificar explicitamente o esquema / proprietário. Mais significativo em versões mais antigas do SQL, mas ainda está lá. Não pode haver uma diferença grande o suficiente para a matéria em seu aplicativo, mas ainda vale a pena conhecer: