No SQL Server 2005, há um conceito de função única ou local declarada dentro de um script SQL ou procedimento armazenado? Eu gostaria de abstrair alguma complexidade em um script que estou escrevendo, mas exigiria ser capaz de declarar uma função.
Apenas curioso.
sql
sql-server
sql-server-2005
tsql
scripting
Mark Carpenter
fonte
fonte
Respostas:
Você pode ligar
CREATE Function
perto do início de seu script eDROP Function
perto do final.fonte
Você pode criar procedimentos armazenados temporários como:
em um script SQL, mas não funções. Você pode fazer com que o proc armazene seu resultado em uma tabela temporária e use essa informação posteriormente no script.
fonte
BEGIN
palavra - chave e substituo aEND
palavra-chave porGO
.Expressões de tabela comuns permitem definir o que são essencialmente visualizações que duram apenas dentro do escopo de suas instruções de seleção, inserção, atualização e exclusão. Dependendo do que você precisa fazer, eles podem ser extremamente úteis.
fonte
Eu sei que posso ser criticado por sugerir SQL dinâmico, mas às vezes é uma boa solução. Apenas certifique-se de entender as implicações de segurança antes de considerar isso.
fonte
Nos scripts, você tem mais opções e uma melhor chance de decomposição racional. Observe o modo SQLCMD (Menu Consulta -> modo SQLCMD), especificamente os comandos: setvar e: r.
Em um procedimento armazenado, suas opções são muito limitadas. Você não pode criar definir uma função diretamente com o corpo de um procedimento. O melhor que você pode fazer é algo assim, com SQL dinâmico:
Isso se aproxima de uma função temporária global, se tal coisa existisse. Ainda está visível para outros usuários. Você poderia acrescentar o @@ SPID de sua conexão para unificar o nome, mas isso exigiria que o restante do procedimento também usasse SQL dinâmico.
fonte
A seguir está o que eu usei no passado para atender à necessidade de um UDF escalar no MS SQL:
Esta abordagem que usa uma variável global para PROCEDURE permite que você faça uso da função não apenas em seus scripts, mas também em suas necessidades de SQL Dinâmico.
fonte