• 締切済み

SQLServer2000:SQL文の記述について

いつもお世話になっております。 SQLServer2000でSQL文で素朴な疑問なのですが、 質問が3点ございます。 1:列の追加 ALTER TABLE 文で、フィールドを追加する際に、 "]"(かぎ括弧閉じ) がフィールド名に存在する場合、どのように記述すればよいのでしょうか。 2:レコードの追加 INSERT 文で追加するレコードの文字列中に "'" (シングルクオテーション) が値に存在する場合、どのように記述すればよいのでしょうか。 3:列の削除 ALTER TABLE でフィールドを削除する際に、 "#"(シャープ) がフィールド名の先頭に存在する場合、どのように記述すればよいのでしょうか。 ご存知の方がいらっしゃいましたら、 ご回答をよろしくお願いいたします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

1は、「]]」のように、2個続けて書くとエスケープされる模様。Enterprise Managerが生成するスクリプトがそうなってます。 2は、「''」のように記述するのが、SQLの仕様。 3は、#で始まる列名を、Enterprise Managerが許してくれなかったので、謎です。

o_w_nakazaki
質問者

お礼

ご回答いただきまして、ありがとうございました。 1及び2の問題につきまして、解決いたしました。 お礼申し上げます。 3は、もう少し調査したいと思います。

関連するQ&A

  • SQLServer:SQL文でシングルクオテーションを混在させたフィールドを追加したい

    SQLServer2000を使用しております。 タイトルのとおりなのですが、 SQL文でシングルクオテーションを混在させたフィールドを追加するにはどのように記述すればよいのでしょうか。 レコードに混在させるには2つシングルクオテーションを記述すればよいというのはわかったのですが、 ALTER TABLE 等でフィールドを追加するときは、 この記述では追加が行われませんでした。 どなたかご教授の程、宜しくお願い致します。

  • SQLServerを使い、SQL文の練習をしたい

    SQLServerを使い、SQL文記述の 練習をしたいと考えています。 (テーブルを作る、結合させる、レコードの合計を出す、などの内容) 自分のPC上で、SQL文を書いて 「わー2つのテーブルが結合した!」 「こっちのテーブルにはないレコードだけを追加できた!」というようなことを実感したいのみなのですが、この目的での利用でも、レンタルサーバーを借りるなどして「サーバー」を準備する必要があるのでしょうか? AccessでSQL文の面白さを知り、 他のデータベース関係のソフトにも触れてみたいと 思ったのが理由です。 よろしくお願いいたします。

  • SQL Server(MSDE2000) : ALTER TABLE

    SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。

  • SQLserverでの列の削除について

    SQLserver2000にてSQL文の練習をしている、データベースの初心者です。 SQLserverでは、直接列の削除ができないと聞きました。 ---------------------------------------- ALTER TABLE テーブル名 DROP 列名 ---------------------------------------- ↑このようにはできませんでした。 そこで、いったん削除したい列以外の列がある別のテーブルをつくってからテーブル名を変更する方法として、 1,新しいテーブルを、元のテーブルからデータをコピーして作る。 2,元のテーブルを削除 3,新しいテーブルの名前を元の名前に変更。 という手段を使えばよいという情報を得ましたが、1の部分がどうしてもできません。 (テーブル削除、テーブル名の変更はできました) ---------------------------------------- CREATE TABLE 新しいテーブル名 AS SELECT 削除した列以外の列名 FROM 元のテーブル名 ---------------------------------------- このようにすると、 ---------------------------------------- サーバー : メッセージ 156、レベル 15、状態 1、行 2 キーワード 'AS' 付近に正しくない構文があります。 ---------------------------------------- といわれてしまいます。 EnterpriseManagerを使わずにやる方法が知りたいです。 正しいSQL文をどうかご教授ください。 どうぞよろしくお願いいたします。 ※ちなみにOSはWIN2000を使っています。

  • SQL文に関して教えてください。

    SQL文に関して教えてください。 SQLServer2005を利用し、マイクロソフトアクセスでadpを利用して構築を初めて行っています。 そこで、SQLServerのビューこのような事は可能でしょうか? (ビューをネストすれば出来るのですが、1つのSQL内で完結させたい) 色々探し、近い物はあったのですが、若干異なります。 フィールドがID1、ID2、ID3、date、txtと存在するとします。 ID1 ID2 date txt 1 1 20100801 test 2 1 20100901 Null 3 3 20100928 Null txtフィールドがNullのレコードを対象とし、dateが一番古い日付のレコード、nullのレコード数を 取り出す。結果としては以下が出れば正解です。 (グループ化が必要かと思います) ID1 ID2 date レコード数 2 1 20100901 2 やはり難しいでしょうか? 御教授願います。

  • SQLserverでのUPDATE文について

    SQLserverで下記のようにテーブルがある場合、 TABLE_Bの単価をTABLE_Aの単価にセットしたい場合、 どのようにUPDATE文を記述すればよいでしょうか? TABLE_A 商品 色 単価 数量 備考   TABLE_B 商品 色 単価 条件:商品と色が一致するもの TABLE_Bには重複データは無いものとする。 クエリーアナライザーで下記のように記述すると エラー「列名が無効です」となりました。 UPDATE TABLE_A SET TABLE_A.単価 = (select TABLE_B.単価 from TABLE_B where TABLE_A.商品 = TABLE_B.商品 and TABLE_A.色 = TABLE_B.色) どのような記述をすれば良いのでしょうか?

  • SQLServerでのSQL文に関して(Accessより)

    SQLServer2005とAccess2000で改修をしています。 共にADO接続をしています。 下記のように単純にUPDATEしているSQLがあるのですがエラーとなります。 フラグAはAccess側から見るとYes/No型 SQLServer2005から見るとビット型です。 (DB.Excute (UPDATE tblテーブル名 SET フラグA = Yes WHERE ID = 1)) エラーはメッセージが出るわけではなく、更新が決定されないというか… デバック自体は何も言われず通るのですが 当処理記述のMDBを閉じた後、下記SQLにてリスト表示させると SELECT IIF(フラグA = NO, '','済') FROM tblテーブル名 WHERE フラグA = NO とすると'済'とは表示されないID=1のレコードが抽出されます。 Access側からリンクテーブルを開き 当レコードのフラグAを手で変更しようとすると 「データの競合」メッセージが表示され「レコードの保存」ボタンの押下は不可です。 見えるレコード値は「0」です。 結局試行錯誤の結果 UPDATE tblテーブル名 SET フラグA = -1 WHERE ID = 1 とすることでSELECT結果は正常となったのですが 原因と、解決方法が適切かがわかりません。 改修中のプログラムは、Yes/No、True/False、-1/0の記述が混在していて 今までYes/No型やビット型、Accessを使ったことがないのでさっぱりです。。 ちなみに現システム使用環境はSQLServer2000とAccess2000/2003です。 普通に動いているようなので、勝手に既存SQLを変えてもいいものか、 むしろSQLServerのバージョンを変えることで変えなければならないのか 判断できたらいいなと思っています。 すいませんが、よろしくお願いいたします。

  • SQLでフィールドの順番を変更したい

    お世話になっております。 ORACLEを使用しております。 既存のテーブルに新しいフィールドをSQL文にて ALTER TABLE TEST_MST ADD TEST_CD VARCHAR2(2); と言う風に、SQL*PLUSにて追加いたしました。 これを参照しますと、 追加したフィールドがテーブルの一番最後のフィールドに 追加されているのですが、 フィールドの順番を変更したいと考えております。 SQL文にて何か方法はございませんでしょうか。 ご返答を宜しくお願い致します。

  • VBAでSQL文の実行の記述について

    こんにちは。アクセスVBA初心者です。 どなたか教えてください! キーが二つあるテーブルに対して、 クエリやマクロを使わずにSQL文を使って存在チェック処理を行って、 ・0件ならば、画面入力値で登録処理、 ・0件でないならば、画面入力値で担当者名を更新処理 という処理を行いたいのですが、 どのようにVBA上でSQL文を記述し、 上記の条件を記述すればいいのかわかりません。 ちなみにテーブル名は「担当者マスタ」で フィールドは ・「支店コード」→第一キー ・「担当者コード」→第二キー ・「担当者名」 です。支店と担当者の組み合わせはユニークです。 画面フォーム名は「担当者マスタメンテ」で 画面フィールドは ・「支店コード」コンボボックス ・「担当者コード」コンボボックス ・「担当者名」テキストフィールド です。 どうか教えてください!お願いいたします!

  • 位置を指定してフィールドを追加する

    位置を指定して、フィールドを追加する方法をがわかりません。 ALTER TABLE [既存のテーブル名] ADD [新しいフィールド名] VARCHAR(100) AFTER [既存のフィールド名]; 上記のような方法でできませんでした。 ちなみにSQLServer2000がインストールされた環境で、クエリアナライザで実行しました。 よろしくお願いいたします。