2009-06-23 12 views
8

Estoy trabajando en un proceso almacenado que ejecuta algunos sql dinámicos. Aquí está el ejemplo que encontré en 4GuysFromRolla.comCuál es la diferencia entre SELECT y SET en T-SQL

CREATE PROCEDURE MyProc 
    (@TableName varchar(255), 
    @FirstName varchar(50), 
    @LastName varchar(50)) 
AS 

    -- Create a variable @SQLStatement 
    DECLARE @SQLStatement varchar(255) 

    -- Enter the dynamic SQL statement into the 
    -- variable @SQLStatement 
    SELECT @SQLStatement = "SELECT * FROM " + 
        @TableName + "WHERE FirstName = '" 
        + @FirstName + "' AND LastName = '" 
        + @LastName + "'" 

    -- Execute the SQL statement 
    EXEC(@SQLStatement) 

Si te fijas, que están usando la palabra clave SELECT intead de SET. No sabía que podrías hacer esto. ¿Puede alguien explicarme las diferencias entre los 2? Siempre pensé que SELECCIONAR era simplemente para seleccionar registros.

+1

duplicados de http://stackoverflow.com/questions/866767/set-vs-select-whats-the-difference – shahkalpesh

+0

No es exactamente un duplicado. La otra pregunta es preguntar sobre el rendimiento. Preguntaba sobre la diferencia de idioma de palabras clave – Micah

Respuesta

10

SELECT es ANSI, SET @LocalVar es MS T-SQL

SELECT permite múltiples assignents: por ejemplo, seleccione @foo = 1, @bar = 2

+0

Su primer punto se contradice con muchas fuentes en la respuesta de @ breitak67 (http://stackoverflow.com/questions/1034634/what-is-the-difference-between-select-and-set- in-t-sql/1034756 # 1034756) –

+0

¡Maldición! Me estoy haciendo viejo. Sin embargo, el SELECT también está ahora en ANSI, creo. – gbn

+0

Es interesante que Sybase no mencione SET @var http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug598.htm – gbn

2

Select permite múltiples tareas.

EDITAR me vencieron por 44 segundos

6

Básicamente, SET es estándar ANSI SQL para las variables de configuración, seleccione no lo es. SET funciona solo para asignaciones únicas, SELECT puede hacer múltiples asignaciones. En lugar de escribir una larga explicación de que queda bien resumido en muchos lugares en la red:

ryan farley blog

tony rogerson

stackoverflow

0

Seleccionar también ser utilizado para obtener la asignación de variables a partir de una instrucción de selección (suponiendo que la declaración sólo devuelve un registro)

Seleccionar @myvariable = myfield de mi mesa donde id = 1

Cuestiones relacionadas