Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 11240|Respuesta: 0

[Fuente] Las sentencias SQL ordinarias pueden ejecutarse con exec

[Copiar enlace]
Publicado en 9/2/2015 14:44:30 | | |
1: Las sentencias SQL ordinarias pueden ejecutarse con exec

Seleccionar * de tableName
exec('select * desde tableName')
exec sp_executesql N'select * de tableName' -- Ten en cuenta que debes añadir N antes de la cadena

2: Al usar nombres de campos, nombres de tablas, nombres de bases de datos, etc. como variables, debe emplearse SQL dinámico

Declara @fname Varchar(20)
set @fname = 'NombreDeArchivado'
Selecciona @fname desde tableName -- Error, no aparece ningún error, pero el resultado es un valor fijo FiledName, que no es lo que quieres.
exec('select ' + @fname + ' de tableName') -- nota que se añade un espacio al lado de la comilla antes y después del signo más

Por supuesto, también puedes cambiar la cadena a la forma de una variable
Declara @fname Varchar(20)
establecer @fname = 'NombreFiled' --Establecer el nombre del campo

declara @s varchar (1000)
establecer @s = 'seleccionar' + @fname + ' desde tableName'
Ejecutivo(@s) -- éxito
ejecutivo sp_executesql @s -- Esta frase informará de un error

Declara @s Nvarchar(1000) — ten en cuenta que aquí se cambia a nvarchar(1000).
establecer @s = 'seleccionar' + @fname + ' desde tableName'
Ejecutivo(@s) -- éxito
Ejecutivo sp_executesql @s -- Esta frase es correcta

3. Parámetros de salida
declarar @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
ejecutivo(@sqls)

--¿cómo pongo el resultado de la ejecución ejecutiva en una variable?

declarar @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
salida ejecutiva sp_executesql @sqls,N'@a int output',@num salida
Seleccionar @num


1: Las sentencias SQL ordinarias pueden ejecutarse con Exec Ejemplo: Seleccione * desde tableName
                Exec('select * desdeNombreTable')
                Exec sp_executesql N'select * from tableName' -- Ten en cuenta que debes añadir N antes de la cadena

2: Al usar nombres de campos, nombres de tablas, nombres de bases de datos, etc. como variables, debe emplearse SQL dinámico

    Error: declarar @fname varchar(20)
                set @fname = 'NombreDeArchivado'
                Selecciona @fname desde tableName -- Error, no aparece ningún error, pero el resultado es un valor fijo FiledName, que no es lo que quieres.
    Correcto: Exec('select ' + @fname + ' de tableName') — fíjate en la suma de un espacio al lado de la comilla simple antes y después del signo de más

    Por supuesto, también puedes cambiar la cadena a la forma de una variable
                Declara @fname Varchar(20)
                establecer @fname = 'NombreFiled' --Establecer el nombre del campo

                declara @s varchar (1000)
                establecer @s = 'seleccionar' + @fname + ' desde tableName'
                Ejecutivo(@s) -- Éxito
                ejecutivo sp_executesql @s -- Esta frase informará de un error

              --Nota: @s parámetro debe ser de tipo ntext o nchar o nvarchar, declare @s varchar(1000) debe cambiarse para declarar @s nvarchar(1000)



               De la siguiente manera:
                Declara @s Nvarchar(1000) — ten en cuenta que aquí se cambia a nvarchar(1000).

                establecer @fname = 'NombreFiled' --Establecer el nombre del campo
                establecer @s = 'seleccionar' + @fname + ' desde tableName'
                Ejecutivo(@s) -- Éxito   
                Ejecutivo sp_executesql @s -- Esta frase es correcta

3. Parámetros de entrada o salida

      (1) Parámetros de entrada:
          declare @QueryString nvarchar(1000) -- variable dinámica de la instrucción de consulta (nota: debe ser de tipo ntext o nchar nvarchar, no de tipo varchar)
          Declarar @paramstring nvarchar(200) - establecer la cadena de parámetros en la sentencia dinámica (nota: debe ser de tipo ntext o nchar nvarchar, no tipo varchar)
          declare @input_id int - define el valor de los parámetros que se pasarán a la sentencia dinámica

          Establece @QueryString='Select * de nombre de tabla donde id=@id' --id es el nombre del campo, @id es el parámetro a pasar
          set @paramstring='@id int' -- Establece la cadena que define los parámetros en la sentencia dinámica
          establecer @input_id =1 -- Establecer el valor del parámetro a pasar en la sentencia dinámica en 1
          ejecutiva sp_executesql @querystring,@paramstring,@id=@input_id
          Si hay múltiples parámetros:
          declare @QueryString nvarchar(1000) -- variable dinámica de la instrucción de consulta (nota: debe ser de tipo ntext o nchar nvarchar, no de tipo varchar)
          Declarar @paramstring nvarchar(200) - establecer la cadena de parámetros en la sentencia dinámica (nota: debe ser de tipo ntext o nchar nvarchar, no tipo varchar)
          declare @input_id int - define el valor del parámetro que se va a pasar a la sentencia dinámica, parámetro 1
          Declare @input_name varchar(20) - define el valor del argumento que se va a pasar a la sentencia dinámica, parámetro 2

          Establece @QueryString='Select * de Nombre de la Tabla donde ID=@id y Nombre=@name' --id y nombre son nombres de campo, y @id y @name son los parámetros que se deben pasar
          Establecer @paramstring='@id int,@name varchar(20)' -- Establecer la cadena de la definición de los parámetros en la sentencia dinámica, separada por ","
          establecer @input_id =1 -- Establecer el valor del parámetro a pasar en la sentencia dinámica en 1
          establece @input_name='Zhang San' --Establece el valor del parámetro que se va a pasar en la sentencia dinámica a 'Zhang San'
          ejecutiva sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Observa el orden de los argumentos
     (2) Parámetros de salida
             declarar @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            ejecutivo(@sqls)
        --¿cómo pongo el resultado de la ejecución ejecutiva en una variable?         
        declare @QueryString nvarchar(1000) -- variable dinámica de nombre de consulta (Nota: debe ser de tipo ntext o nchar nvarchar, no tipo varchar)
        Declarar @paramstring nvarchar(200) - establecer la cadena de parámetros en la sentencia dinámica (nota: debe ser de tipo ntext o nchar nvarchar, no tipo varchar)
        declara @output_result int - el resultado de la consulta se asigna al @output_result

        Set @QueryString='Select @totalcount=count(*) from tablename' --@totalcount es el parámetro de salida
        establecer @paramstring='@totalcount int output' --Establecer la cadena definida por los parámetros en la instrucción dinámica, separada por ","
        Exec sp_executesql @querystring,@paramstring,@totalcount=@output_result salida
        Selecciona @output_result
        Por supuesto, los parámetros de entrada y salida pueden usarse juntos, así que puedes probarlo tú mismo.
        Además, si quieres generar el conjunto de resultados de la consulta de la sentencia dinámica, solo pienso en el siguiente método de usar tablas temporales, no sé si tienes una mejor opción.
        SI object_id('[tempdb].[ dbo].#tmp') NO ES NULO -- Determina si la tabla temporal #tmp existe y, si existe, elimínala
            Tabla de #tmp
        seleccionar * en #tmp desde nombre de tabla donde 1=2 -- Crea un #tmp temporal de tabla con la misma estructura que nombre de tabla

        declare @QueryString nvarchar(1000) -- variable dinámica de nombre de consulta (Nota: debe ser de tipo ntext o nchar nvarchar, no tipo varchar)
        Set @QueryString='Select * de nombre de la tabla '
        insertar en #tmp(field1,field2,...) exec(@querystirng)




Anterior:Método SQL para vaciar datos de tablas
Próximo:Notas SQL de los últimos días
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com