- ベストアンサー
SETとSELECTの違い(Transact-SQL)
お世話になります。 初歩的な質問で申し訳ありません。 T-SQLで、変数 @Str に値を代入する場合、 DECLARE @Str VARCHAR(100) SET @Str = 'TEST' -- (1) SELECT @Str 'TEST' -- (2) (1)と(2)の二通り書けるみたいですが、 どのように違うのでしょうか? よろしくお願いします。
- nsv1000e
- お礼率50% (8/16)
- SQL Server
- 回答数1
- ありがとう数5
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「SWL Server 7.0 MSDE 完全トレーニングテキスト」という書籍に書いてありました。 "SELECT @hoge=" の書き方は SQL Server 6.5 までの書式で、SQL Server 7.0 以降は "SET @hoge=" の書き方を推奨しているようです。 ただし SELECT を使う方法も依然として大丈夫です。 個人的な意見ですが、変数への代入などは SET を使った方が読みやすいかな、と思ってます。 SELECT がやたらと出てくると見づらくて・・・
関連するQ&A
- 【Transact-sql】 execの結果をoutputパラメータに持たせたい
タイトルの通り、execの結果をoutputパラメータに持たせたいのですが、 どうすればご存知の方、ご教授お願いします。以下のように、count(*)の結果を持たせたいです。以下にサンプルコードを記載しました。 ---ストアドabc--- ( @aWork int output, @bWork int output, @cWork int output, @IDs varchar ) declare @Sql1 varchar(500) declare @Sql2 varchar(500) declare @Sql3 varchar(500) declare @IDs varchar(500) set = '1,2,3' set @Sql1 = 'select count(*) from a where id = ' + IDs -- @aWork = exec(@Sql1)としたい exec(@Sql1) set @Sql2 = 'select count(*) from b where id = ' + IDs -- @bWork = exec(@Sql2)としたい exec(@Sql2) set @Sql3 = 'select count(*) from c where id = ' + IDs -- @cWork = exec(@Sql3)としたい exec(@Sql3)
- ベストアンサー
- SQL Server
- 【Transact-sql】 where条件、inのパタメータを変数に持たせる方法
inの中の値を変数に持たせ、実行したいのですが方法がわかりません。 以下に、問題となっているsqlを記載しました。 aテーブルのIDはsmallint型で、varchar型等への型変更不可とします。 cast(ID as varchar(100)) in (@ID) 等も試してみたのですが、 '1,2,3'をin内の1データとみなしてしまっているようで、正しい結果を 返してくれませんでした。 declare @ID varchar(100) set @ID = '1,2,3' SELECT * FROM a WHERE ID in (@ID)
- ベストアンサー
- SQL Server
- PRO*Cでテーブル名にバインド変数は使えますか?
PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;
- ベストアンサー
- その他(プログラミング・開発)
- 変数の取り扱いについて
はじめまして。思いっきりSQLSERVERは初心者なんですが宜しくお願いします。 現在SQLSERVER2005です。 ややこしくなるので要点だけ以下まとめています。 変数を利用してレコードを抽出する時なんですが… ALTER PROCEDURE Test @Rank INT BEGIN DECLARE @SELECT AS VARCHAR(100) DECLARE @WHERE AS VARCHAR(100) DECLARE @SQL AS VARCHAR(200) SET @SELECT = 'SELECT * FROM tblA ' SET @WHERE = 'WHERE Rank > ' + @Rank SET @SQL = @SELECT + @WHERE EXEC(@SQL) END 実行すると varchar の値 'WHERE Rank > 'をデータ型 int に変換できませんでした。 となります。 Rank部分が数値なんですが、どのように取扱いすべきなんでしょうか。
- ベストアンサー
- SQL Server
- SELECT文の結果をDEFINEの値として使用したいのですが。。。 [Oracle9i]
こんにちは。 test.sqlでバインド変数として使用されている"hensu"に対して、SELECT文の結果を代入したいと考えています。 そこで、DEFINEで下記のようにセットしてみようとしたのですが、"hensu"には"hensu_id"という文字として入ってしまうようです。 DECLARE hensu_id number ; BEGIN select min(id) into hensu_id; END; / DEFINE hensu =hensu_id @c:\test.sql 初歩的な質問ですみませんが、宜しくお願いします。
- 締切済み
- Oracle
- SQLストアドについて
SQL超初心者です。 ストアド内でテーブル名を可変にしたいのですが以下のようなエラーメッセージが表示され でません。どなたか教えていただけませんか? <エラーメッセージ> テーブル変数 "@AA" を宣言してください。 ◆環境 sql Sever 2005 ◆コードは以下の通りです。 DECLARE @AA VARCHAR(50) DECLARE @HANTEI CHAR(5) DECLARE @FETCHTABLE1 CHAR(22) DECLARE @FETCHTABLE2 CHAR(22) SET @HANTEI = 'ABCDEF' SET @FETCHTABLE1 = 'DBO.USV_YOSAN' SET @FETCHTABLE2 = 'DBO.USV_JISEKI' BEGIN IF @HANTEI = 'ABCEDF' SET @AA= @FETCHTABLE2 SELECT * FROM @AA PRINT @AA END 以上 よろしくお願いいたします。
- ベストアンサー
- その他(ビジネス・キャリア)
- VB2005のSQLにて定義した変数の使用について
VB2005、DBはSqlserver2005 についてです。 以下のようなSQLにて変数に値を設定して、フォーム上のテキストボックスにその値を 表示させたいのですが、うまくいきません。 どうしたらよいかアドバイス頂けると助かります。 <SQL> command.CommandText = "BEGIN DECLARE @SQL-todoufuken_code VARCHAR(20) " & _ "SET @SQL-todoufuken_code = (SELECT MAX(todoufuken_code) FROM tbl_todoufuken)" & _ "END" <テキストボックスへの設定> txtTodoufuken_code.Text = @SQL-todoufuken_code
- ベストアンサー
- Visual Basic
- ODBC SQLサーバーでSQLを使いたい・・・
ODBC SQLサーバーでSQLを使いたい・・・ SET NOCOUNT ON DECLARE @EDATE DATETIME DECLARE @CUNT INT SET @COUNT = 0 WHILE ( @I <> -7 ) BEGIN IF ( DATANAME( WEEKDAY, DATEADD( DD, -1, GETDATE()))) = "金曜" BREAK ELSE SELECT @CUNT = @CUNT + 1 END SET @EDATE = CONVERT( CHAR, CONVERT( VARCHAR, DATEADD(DD, @COUNT, GETDATE()), 112) SELECT @EDATE 実行日からさかのぼり、金曜日の日付を表示したいSQLを作成しています。 なぜか"金曜"がおかしいとエラーが出てしまいます。 どなたかわかる方いましたらご教授お願い致します。
- ベストアンサー
- SQL Server
- 【PL/SQL】SQL文が長すぎてSELECTできない
oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1 || sqlStr2 || sqlStr3 <<省略>> )
- ベストアンサー
- Oracle
- バインド変数について
PL/SQLのバインド変数について調べていますが理解できず困っています。 [理解内容] 1.利点 :SQL文の検索にバインド変数を利用すると、同一のSQLとして実行できる ⇒ 繰り返し処理(ループ)では有効 2.使用方法 :静的SQL・動的SQLで使用可能 [疑問点] 静的SQLではバインド変数をどう宣言すればよいですか? [SQL*Plus]・[動的SQL]は例文がありました ●SQL*Plusでの宣言方法 (例) SQL> set null '<null>' SQL> set head off SQL> variable var_at_sqlplus number ●動的SQLの記述方法 (例) declare v_sql varchar2(256); v_id varchar2(3); begin v_sql = 'select id into :v_id from test'; execute immediate v_sql into v_id; end; ●静的SQL ・・・【 エラーになる 】 declare variable v_id varchar2(3); begin select id into :v_id from test' end; どんな事でもかまいませんので回答よろしくお願いします
- ベストアンサー
- Oracle
お礼
私も、"SET @hoge="の書き方の方が読みやすいと思いました。ありがとうございました。