Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 11240|Resposta: 0

[Fonte] Instruções SQL comuns podem ser executadas com exec

[Copiar link]
Publicado em 09/02/2015 14:44:30 | | |
1: Instruções SQL comuns podem ser executadas com exec

Selecione * a partir do tableName
exec('select * de NomeTabela')
exec sp_executesql N'select * from tableName' -- Note que você deve adicionar N antes da string

2: Ao usar nomes de campos, nomes de tabelas, nomes de banco de dados, etc. como variáveis, SQL dinâmico deve ser usado

declare @fname Varchar(20)
set @fname = 'Nome Arquivado'
Selecione @fname em tableName -- Erro, nenhum erro é solicitado, mas o resultado é um valor fixo FiledName, que não é o que você quer.
exec('select ' + @fname + ' from tableName') — note que um espaço é adicionado ao lado da aspas simples antes e depois do sinal de mais

Claro, você também pode mudar a sequência para a forma de uma variável
declare @fname Varchar(20)
definir @fname = 'NomeDeFileiado' --Definir o nome do campo

declare @s varchar(1000)
defina @s = 'selecionar' + @fname + ' a partir do NomeDa Mesa'
Executivo(@s) -- Sucesso
executivo sp_executesql @s -- Esta frase reportará um erro

declare @s Nvarchar(1000) — note que aqui é alterado para nvarchar(1000).
defina @s = 'selecionar' + @fname + ' a partir do NomeDa Mesa'
Executivo(@s) -- Sucesso
Executivo sp_executesql @s -- Esta frase está correta

3. Parâmetros de saída
declarar @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
executivo(@sqls)

--como faço para colocar o resultado da execução executiva em uma variável?

declarar @num int, @sqls nvarchar(4000)
Set @sqls='Select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
selecione @num


1: Instruções SQL comuns podem ser executadas com Exemplo Executivo: Selecione * a partir do tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Note que você deve adicionar N antes da string

2: Ao usar nomes de campos, nomes de tabelas, nomes de banco de dados, etc. como variáveis, SQL dinâmico deve ser usado

    Erro: declarar @fname varchar(20)
                set @fname = 'Nome Arquivado'
                Selecione @fname em tableName -- Erro, nenhum erro é solicitado, mas o resultado é um valor fixo FiledName, que não é o que você quer.
    Correto: Exec('select ' + @fname + ' do tableName') — note a adição de um espaço ao lado da aspas simples antes e depois do sinal de mais

    Claro, você também pode mudar a sequência para a forma de uma variável
                declare @fname Varchar(20)
                definir @fname = 'NomeDeFileiado' --Definir o nome do campo

                declare @s varchar(1000)
                defina @s = 'selecionar' + @fname + ' a partir do NomeDa Mesa'
                Executivo(@s) -- Sucesso
                executivo sp_executesql @s -- Esta frase reportará um erro

              --Nota: @s parâmetro deve ser do tipo ntext, nchar ou nvarchar, declare @s varchar(1000) deve ser alterado para declarar @s nvarchar(1000)



               Conforme segue:
                declare @s Nvarchar(1000) — note que aqui é alterado para nvarchar(1000).

                definir @fname = 'NomeDeFileiado' --Definir o nome do campo
                defina @s = 'selecionar' + @fname + ' a partir do NomeDa Mesa'
                Executivo(@s) -- Sucesso   
                Executivo sp_executesql @s -- Esta frase está correta

3. Parâmetros de entrada ou saída

      (1) Parâmetros de entrada:
          declare @QueryString nvarchar(1000) -- variável dinâmica da instrução de consulta (nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
          Declare @paramstring nvarchar(200) - defina a cadeia de parâmetros na instrução dinâmica (nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
          declare @input_id int - define o valor dos parâmetros a serem passados na instrução dinâmica

          defina @QueryString='selecione * do nome da tabela onde id=@id' --id é o nome do campo, @id é o parâmetro a ser passado
          define @paramstring='@id int' -- Define a string que define os parâmetros na instrução dinâmica
          definir @input_id =1 -- Definir o valor do parâmetro a ser passado na instrução dinâmica para 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Se houver múltiplos parâmetros:
          declare @QueryString nvarchar(1000) -- variável dinâmica da instrução de consulta (nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
          Declare @paramstring nvarchar(200) - defina a cadeia de parâmetros na instrução dinâmica (nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
          declare @input_id int - define o valor do parâmetro a ser passado para a instrução dinâmica, parâmetro 1
          Declare @input_name varchar(20) - define o valor do argumento a ser passado para a afirmação dinâmica, parâmetro 2

          Defina @QueryString='selecione * do nome da tabela onde id=@id e nome=@name' --id e nome são nomes de campo, e @id e @name são os parâmetros a serem passados
          Defina @paramstring='@id int,@name varchar(20)' -- Defina a cadeia da definição dos parâmetros na instrução dinâmica, separada por ","
          definir @input_id =1 -- Definir o valor do parâmetro a ser passado na instrução dinâmica para 1
          defina @input_name='Zhang San' --Defina o valor do parâmetro a ser passado na instrução dinâmica para 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Note a ordem dos argumentos
     (2) Parâmetros de saída
             declarar @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            executivo(@sqls)
        --como faço para colocar o resultado da execução executiva em uma variável?         
        declare @QueryString nvarchar(1000) -- variável dinâmica do nome da consulta (Nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
        Declare @paramstring nvarchar(200) - defina a cadeia de parâmetros na instrução dinâmica (nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
        declare @output_result int - o resultado da consulta é atribuído ao @output_result

        Defina @QueryString='selecione @totalcount=count(*) do nome da tabela' --@totalcount é o parâmetro de saída
        defina @paramstring='@totalcount int output' --Defina a string definida pelos parâmetros na instrução dinâmica, separada por ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result saída
        selecione @output_result
        Claro, os parâmetros de entrada e saída podem ser usados juntos, então você pode tentar por conta própria.
        Além disso, se você quiser gerar o conjunto de resultados da consulta dinâmica da instrução, penso apenas no seguinte método de usar tabelas temporárias, não sei se você tem uma forma melhor.
        SE object_id('[tempdb].[ dbo].#tmp') NÃO É NULO -- Determine se a tabela temporária #tmp existe, e se existir, delete-a
            #tmp drop table
        selecione * em #tmp a partir do nome da tabela onde 1=2 -- Crie uma #tmp temporária da tabela com a mesma estrutura do nome da tabela

        declare @QueryString nvarchar(1000) -- variável dinâmica do nome da consulta (Nota: deve ser do tipo ntext ou nchar nvarchar, não do tipo varchar)
        Set @QueryString='Select * do nome da tabela '
        inserir em #tmp(field1,field2,...) exec(@querystirng)




Anterior:Método SQL de esvaziar dados de tabelas
Próximo:Notas SQL dos últimos dias
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com