2009-06-23 9 views
8

私はいくつかの動的SQLを実行するストアドプロシージャで作業しています。ここで私はあなたが気付いた場合、彼らはSETの inteadをSELECTキーワードを使用している4GuysFromRolla.comT-SQLのSELECTとSETの違いは何ですか

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) 

で見つかった例です。私はあなたがこれを行うことができるかはわかりませんでした。誰かが2の違いを私に説明することはできますか?私はいつもSELECTと思っただけでレコードを選択していました。例えば@foo = 1、@bar = 2

+1

重複/ 866767/set-vs-select-whats-the-difference – shahkalpesh

+0

正確には重複していません。もう一つの質問は、パフォーマンスについての質問です。キーワードの相違点について質問していました – Micah

答えて

10

はMS T-SQL

SELECTが複数assignentsが可能です。

EDITあなたが44秒

+0

あなたの最初の点は、@ breitak67の回答の多くの情報源と矛盾しています(http://stackoverflow.com/questions/1034634/what-is-the-difference-between-select-and-set- in-t-sql/1034756#1034756) –

+0

くそー!私は年をとりました。しかし、SELECTはANSIにもあります。 – gbn

+0

興味深いことにSybaseにはSET @varはありません http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug598.htm – gbn

2

選択は、複数の割り当てを可能にする選択:SELECTはANSI、SET @LocalVarある

6

で私を倒すには、基本的には、SETは、SELECTではない、設定変数のためのSQLのANSI標準です。 SETは単一の代入に対してのみ機能し、SELECTは複数の代入を行うことができます。あなたが複数の値を割り当てる必要がある場合

ryan farley blog

tony rogerson

stackoverflow

0

のSELECTがより速くなる可能性があります:

いうよりも、ネット上の多くの場所にまとめて長い説明を書きます

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/25/defensive-database-programming-set-vs-select.aspx

+0

あなたはまだ値をメモリに書き込まなければならないと考えると、私はそれを疑う。 2xSETでも1xSELECTでも2つの割り当てがあります。 – gbn

+0

gbn、私はベンチマークを提供しました。ベンチマークを実行して自分自身で確認することができます –

0

選択することもできますhttp://stackoverflow.com/questionsのselect文から変数の割り当てを取得するために使用することが私のテーブルから

選択@myvariable = myFieldで(文は1つのレコードだけを返すと仮定)ID = 1

関連する問題