Outra dúvida comum é:
“Rodei um script logado na base com determinado usário, e o script não especificava o owner (dbo, por exemplo). Agora os demais usuários para poderem se referenciar ao objeto criado, precisam especificar meu usuário na frente do nome do objeto.”
Típico, o camarada está logado como JOAO na base de dados e roda um CREATE TABLE Clientes. A partir daí, as consultas à tabela precisam ser feitas especificando o usuário proprietário do objeto (owner), algo como: SELECT * FROM JOAO.Clientes.
Agora, se o João tivesse rodado a querie: CREATE TABLE dbo.Clientes, os demais usuários poderiam se referenciar à tabela simplesmente pelo nome da mesma: SELECT * FROM Clientes.
Mas agora é tarde, o objeto já fora criado, como podemos alterar o proprietário do objeto ? A querie abaixo resolve o problema:
EXEC sp_changeobjectowner ‘Joao.Clientes’, ‘dbo’
Lembrando que isso serve para Tables, Views, Procedures, Functions, etc.
Editado:
Conforme solicitado, abaixo uma dica de como proceder para executar o processo para diversos objetos de uma única vez. Primeiramente vamos montar uma querie para listar todos os objetos.
SELECT
[Name], xType,
convert(sysname,USER_NAME(uid)) As [Owner]
FROM sysObjects
Dessa forma teríamos uma lista de todos os objetos, isso inclui TABLEs, VIEWs, PROCs, até mesmo TIGGERs, PKs, etc. Se quisermos filtrar apenas algum(ns) tipo(s) de objeto(s) precisamos incluir condições where na query acima, por exemplo; xType=’U', traria apenas User Tables (tabelas que não sejam de sistema), xType=’V’ apenas views, xType=’P’ apenas procedures, e assim por diante.
Uma vez listado os objetos desejados, vamos filtrar apenas aqueles cujo owner seja diferente de dbo e acrescentar o retorno de uma coluna que irá trazer, para cada objeto, a instrução montada para ser executada.
SELECT
[Name], xType,
‘EXEC sp_changeobjectowner ”’ + [Owner] + ‘.’ + [Name] + ”’, ”’ + ‘dbo’ + ”” As Instrucao
FROM
(
SELECT
[Name], xType,
convert(sysname,USER_NAME(uid)) As [Owner]
FROM sysObjects
) As Sub
WHERE
[Owner] <> ‘dbo’
O retorno dessa querie, devemos exportar para um TXT (da forma que achar mais prático), copiar e colar (apenas a coluna instrucao) de volta em uma outra janela do SQL Lite (ou a ferramenta que estiver usando) e executar.
Espero ter ajudado. Qualquer dúvida ou sugestão, comentem.