2009-06-23 6 views
8

Je travaille sur un proc stocké qui exécute du SQL dynamique. Voici l'exemple que je trouve sur 4GuysFromRolla.comQuelle est la différence entre SELECT et SET dans 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 vous remarquez, ils utilisent le mot-clé SELECT intead de SET. Je ne savais pas que tu pouvais faire ça. Quelqu'un peut-il m'expliquer les différences entre les 2? J'ai toujours pensé que SELECT était simplement pour sélectionner des enregistrements.

+1

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

+0

Pas exactement un doublon. L'autre question concerne la performance. Je demandais à propos de la différence de langue mot-clé – Micah

Répondre

10

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

SELECT permet à plusieurs assignents: SELECT par exemple @foo = 1, @bar = 2

+0

Votre premier point est contredit par de nombreuses sources dans la réponse @ breitak67 (http://stackoverflow.com/questions/1034634/what-is-the-difference-between-select-and-set- in-t-sql/1034756 # 1034756) –

+0

Merde! Je me fais vieux. Cependant, le SELECT est également en ANSI maintenant, je pense. – gbn

+0

Intéressant que Sybase ne mentionne pas SET @var http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug598.htm – gbn

2

Select permet plusieurs affectations.

EDIT vous me battra 44 secondes

6

Fondamentalement, SET est standard SQL ANSI pour les variables de paramètres, SELECT n'est pas. SET fonctionne uniquement pour les affectations uniques, SELECT peut effectuer plusieurs affectations. Plutôt que d'écrire une longue explication qui est bien résumée dans de nombreux endroits sur le net:

ryan farley blog

tony rogerson

stackoverflow

0

Sélectionner aussi être utilisé pour obtenir l'affectation variable d'une instruction select (en supposant l'instruction renvoie un seul enregistrement)

Sélectionnez @myvariable = myfield de ma table où id = 1

Questions connexes