Articles

SQLSHACK

Posted by admin

SQL Server nos proporciona dos métodos en T-SQL para asignar un valor a una variable SQL local creada previamente. El primer método es la instrucción SET, la instrucción estándar ANSI que se usa comúnmente para la asignación de valores variables. La segunda instrucción es la instrucción SELECT., Además de su uso principal para formar la lógica que se usa para recuperar datos de una tabla de base de datos o varias tablas en SQL Server, la instrucción SELECT también se puede usar para asignar un valor a una variable local creada previamente directamente o desde una variable, Vista o tabla.

aunque ambas sentencias T-SQL cumplen con la tarea de asignación de valor de variable SQL, hay una serie de diferencias entre las sentencias SET y SELECT que pueden llevar a elegir una de ellas en circunstancias específicas, sobre la otra., En este artículo, describiremos en detalle cuándo y por qué elegir entre las sentencias SET y SELECT T-SQL mientras se asigna un valor a una variable.

comenzaremos con la creación de una nueva tabla y la llenaremos con algunos registros para nuestra demo.,d usando la siguiente instrucción SELECT:

1
SELECT * FROM SetVsSelectDemo

Y los datos se muestra a continuación:

Si nos las arreglamos para asignar un valor escalar de la variable SQL que previamente se ha definido el uso de la instrucción DECLARE, tanto el SET y SELECCIONE las declaraciones de alcanzar el objetivo de la misma forma.,c47f9″>

1
2
3
4

DECLARE @EmpName2 NVARCHAR(50)
SELECT @EmpName2 = ‘Ali’
PRINT @EmpName2
IR

La asignación de valores para las variables en las consultas anteriores será impreso en la ficha Mensajes, como se muestra a continuación:

SQL Server nos permite asignar un valor para una variable SQL de una base de datos de la tabla o vista.,

3
4
DECLARE @EmpName NVARCHAR(50)
SELECT @EmpName = FROM SetVsSelectDemo WHERE GroupNumber = 3
PRINT @EmpName
GO

los resultados de las dos consultas anteriores se mostrarán en la pestaña Mensajes como se muestra a continuación:

hasta este punto, puede ver que tanto las instrucciones set como select pueden realizar la tarea de asignación de valores variables de la misma manera y difieren del lado del Código solamente.,

múltiples Variables SQL

asumimos que necesitamos asignar valores a múltiples variables de una sola vez. La instrucción SET puede asignar valor a una variable a la vez; esto significa que, si necesitamos asignar valores para dos variables, necesitamos escribir dos instrucciones SET. En el ejemplo siguiente, cada variable requiere una instrucción SET separada para asignarle un valor escalar, antes de imprimirla:

por otro lado, la instrucción SELECT se puede usar para asignar valores a las múltiples variables SQL previamente definidas usando una instrucción SELECT., La siguiente instrucción SELECT se puede usar fácilmente para asignar valores escalares a las dos variables utilizando una instrucción SELECT antes de imprimirla:

Puede ver en el resultado impreso a continuación, que ambas instrucciones logran la misma tarea, con la instrucción SELECT mejor que la instrucción SET al intentar asignar valores a múltiples variables debido a la simplicidad del código:

nuevamente, si intentamos asignar valores de la tabla de base de datos a múltiples variables, establecer sentencias iguales al número de variables.,o las variables @EmpName y @EmpGrade como se muestra en el script a continuación:

por otro lado, solo se puede usar una instrucción SELECT para asignar valores de la tabla SetVsSelectDemo a las variables SQL @EmpName y @EmpGrade, utilizando una consulta más simple como se muestra claramente a continuación:

es obvio de las dos consultas anteriores que la consulta que está utilizando la instrucción SELECT es más eficiente que la que utiliza instrucción SET cuando se asignan valores a varias variables al mismo tiempo, debido al hecho de que la instrucción SET solo puede asignar una variable a la vez., Los resultados similares de las dos consultas anteriores que se imprimen en la pestaña mensajes serán como los siguientes en nuestro caso:

múltiples valores

el segundo punto, en el que la diferencia entre asignar a las variables SQL que utilizan las instrucciones SELECT o set aparece, es cuando el conjunto de resultados de la consulta subconsulta que se utiliza para asignar un valor a la variable devuelve más de un valor., En este caso, la instrucción SET devolverá un error, ya que solo acepta un valor escalar de la subconsulta para asignarlo a la variable, mientras que la instrucción SELECT acepta esa situación, en la que la subconsulta devolverá varios valores, sin generar ningún error. Sin embargo, no tendrá ningún control sobre qué valor se asignará a la variable, donde el último valor devuelto por la subconsulta se asignará a la variable.

supongamos que necesitamos asignar el valor Name del segundo grupo de la tabla SetVsSelectDemo creada previamente a la variable SQL @EmpName., Recuerde que el segundo grupo en esa tabla contiene dos registros en el conjunto de resultados como se muestra a continuación:

el script que se usa para asignar el valor de la variable @EmpName de la tabla SetVsSelectDemo usando las instrucciones SET y SELECT será como:

debido al hecho de que, la instrucción subconsulta devolvió dos registros, la asignación de valor a la variable SQL @EmpName usando la instrucción SET puede asignar un solo valor a las variables.,l tenga éxito sin error, asignando el nombre del segundo registro devuelto, que es «Zaid», a la variable como se muestra en los mensajes de resultado a continuación:

podemos aprender del resultado anterior que, cuando espera que la subconsulta devuelva más de un valor, es mejor usar la instrucción SET para asignar valor a la variable implementando un mecanismo de manejo de errores adecuado, en lugar de usar la instrucción SELECT que asignará el último valor a la variable SQL, sin error devuelto para advertirnos de que la subconsulta devolvió varios valores.,

Assign no value

otra diferencia entre asignar valores a las variables SQL utilizando las sentencias SET y SELECT, es cuando la subconsulta que se utiliza para asignar un valor a la variable no devuelve ningún valor. Si la variable declarada anteriormente no tiene un valor inicial, tanto la instrucción SET como SELECT actuarán de la misma manera, asignando un valor NULL a esa variable.

supongamos que necesitamos asignar a la variable @EmpName, sin valor inicial, el nombre del quinto grupo de la tabla SetVsSelectDemo.,lectDemo WHERE GroupNumber = 5

SELECT @EmpName AS SELECT_Name
GO

sin valor inicial para la variable @EmpName, y sin valor devuelto por la subconsulta, se asignará un valor NULL a esa variable en ambos casos como se muestra claramente en el siguiente mensaje de resultado:

si la variable SQL declarada anteriormente tiene un valor inicial, y la subconsulta que se utiliza para asignar un valor a la variable no devuelve ningún valor, la instrucción set and select se comportará de diferentes maneras., En este caso, la instrucción SET sobrescribirá el valor inicial de la variable y devolverá el valor NULL. Por el contrario, la instrucción SELECT no sobrescribirá el valor inicial de la variable y la devolverá si no se devuelve ningún valor de la subconsulta de asignación.,script a continuación:

Teniendo en cuenta que la subconsulta de asignación retuned no value, la consulta que usó la instrucción SET para asignar valor a la variable SQL anulará el valor inicial de la variable, devolviendo valor nulo, mientras que la consulta que usó la instrucción SELECT para asignar valor a la variable mantendrá el valor inicial sin cambios ya que no se devuelve ningún valor de la subconsulta, como se muestra claramente en los resultados a continuación:

conclusión

SQL Server nos proporciona dos métodos principales que se utilizan para asignar valores a las variables SQL., En la mayoría de los casos, tanto las sentencias SET como SELECT cumplen la tarea de asignación de valores variables sin ningún problema.,si la subconsulta de asignación no devuelve ningún valor, la instrucción SET anulará el valor inicial de la variable a NULL, mientras que la instrucción SELECT no anulará su valor inicial

  • Author
  • Recent Posts
Ahmad Yaseen es un ingeniero de Microsoft Big Data con profundo conocimiento y experiencia en SQL BI, administración de bases de datos SQL Server y campos de desarrollo., es experto en soluciones certificadas por Microsoft en Administración y análisis de datos, asociado en soluciones certificadas por Microsoft en Administración y desarrollo de bases de datos SQL, Asociado en desarrolladores de Azure y entrenador certificado por Microsoft.
Además, está contribuyendo con sus consejos SQL en muchos blogs.,
Ver todos los mensajes por Ahmad Yasin

Últimas entradas por Ahmad Yasin (ver todos)
  • como monitor de Azure Datos de Fábrica – 15 de enero de 2021
  • Usar Fuente de Control en Azure Datos de Fábrica – 12 de enero, 2021
  • el Uso de Plantillas en Azure Datos de Fábrica – 8 de enero de 2021

Leave A Comment