É possível passar o nome de uma tabela para um procedimento armazenado?
Por exemplo, suponha que você tenha várias exibições da mesma tabela. Todos eles têm exatamente a mesma estrutura.
Você deseja um procedimento armazenado que possa ser executado para qualquer uma das exibições.
Algo como:
create procedure myprocedure
@tableName varchar(50) = ''
select blah from @tableName where blah = blah2
Quando tento fazer isso, recebo
Must declare the table variable @tablename
Alguma ideia de como posso fazer isso?
Em vez de criar exibições, por que não criar uma função com valor de tabela embutida - efetivamente uma exibição parametrizada. Você basicamente obtém todos os benefícios de visualizações E parâmetros.
Outra coisa que você pode fazer no seu TVF é algo assim:
Agora seus intervalos têm nomes (em uma tabela onde eles podem ser facilmente gerenciados sem alterar o esquema) - isso também lida perfeitamente com vários intervalos com o mesmo nome, embora, se os intervalos se sobrepõem, você pode ter duplicatas devido à junção correspondente a ambos.
Além disso, considere evitar ENTRE:
Eu sugiro fortemente que você reconsidere seus requisitos e, ao fazer perguntas aqui, inclua mais sobre suas motivações, porque quando você faz uma pergunta com uma noção preconcebida de qual é a solução, é provável que obtenha uma solução abaixo do ideal. (como as soluções SQL dinâmicas fornecidas não funcionarão facilmente para o seu caso OR, mas essas informações sobre o espaço do problema estão ocultas em um comentário seu)
De: http://sqlfiddle.com/#!6/a628a/1
Esta parte:
Significa que cada item de log será associado aos intervalos em que se enquadra (por data), cada intervalo será associado aos grupos em que está, mas apenas o grupo selecionado será usado.
Nomes de objetos não podem ser parametrizados.
Você precisa usar SQL dinâmico:
Observe que
sysname
é (atualmente) definido comonvarchar(128)
.Acho que sua melhor aposta é usar SQL dinâmico para fazer isso:
Este código funciona em C# + SQL Server 2008