Estou tentando criar um script INSERT para salvar dados de uma única tabela em um banco de dados corrompido.
Coloquei o banco de dados online com sucesso e o coloquei no modo EMERGENCY / SINGLE USER (seguindo este http://www.sqlskills.com/blogs/paul/disaster-recovery-101-hack-attach-a-damaged-database/ )
Isso permite SELECTs contra os dados. No entanto, ao tentar usar a ferramenta "Gerar Scripts" no SSMS, recebo um erro porque já existe uma conexão com o banco de dados. Presumo que a ferramenta de script esteja tentando criar uma conexão secundária (sql server local?)/abrir o banco de dados para fazer seu trabalho, mas minha sessão do SSMS está bloqueando.
É possível garantir que a ferramenta de script esteja usando a mesma conexão já estabelecida? Ou largar a conexão, mas manter o banco de dados em modo EMERGÊNCIA?
Você pode interromper sua conexão e o banco de dados permanecerá no modo de usuário EMERGÊNCIA/ÚNICO. E o gerenciador de objetos no SSMS usa sua própria conexão. Não tenho certeza se a ferramenta geradora de scripts usa outra conexão ou não. No entanto, não há como garantir que sua conexão com a ferramenta de geração de scripts será aquela que assumirá a única conexão depois de descartá-la. A melhor aposta é gerar seu script em um banco de dados alternativo (onde quer que você esteja movendo seus dados deve funcionar). Em seguida, copie esse script para a janela de consulta conectada ao banco de dados e execute-o.
EDITAR:
Ok, fiz um pequeno teste. Se você descartar sua conexão de consulta e abrir uma conexão no Object Explorer, poderá criar um script de instrução INSERT (supondo que seja isso que você deseja).
No Object Explorer, encontre sua tabela e clique com o botão direito nela. Vá para Script Table As -> INSERT To -> Clipboard
Certifique-se de usar a área de transferência. Se você fizer uma nova janela de consulta, ela falhará. Em seguida, desconecte o Object Explorer e abra uma janela de consulta ao seu banco de dados e cole.
Caso contrário, precisarei de mais informações sobre o tipo de
INSERT
declaração que você está tentando criar.EDIT2: Com base nos comentários
Supondo que você tenha seu banco de dados de destino (para onde está tentando mover os dados) na mesma instância (e se não for, crie um pelo menos temporariamente), use o seguinte trecho de código.
Se você tiver uma coluna de identidade, precisará fazer o seguinte