• 締切済み

SQLSERVER上でUPDATE文を実行するときに?

SQLSERVERでUPDATE文を実行しようとしています。 UPDATE A SET CharName = (LEFT(B.UserName, 20)) FROM A, B WHERE A.USER_CD = B.UserID これを実行しようとしているのですが、STRING、バイナリーは切り詰められました。というエラーがでます・・・。 こういう使い方はできないのでしょうか?

みんなの回答

  • ichi1123
  • ベストアンサー率20% (1/5)
回答No.4

質問番号 No.1191712 で自分が同じような質問をしています。その回答も参考になるかと思います。

noname#9100
noname#9100
回答No.3

UPDATE A SET CharName = cast(B.UserName as varchar(20)) FROM A, B WHERE A.USER_CD = B.UserID でいけます。

  • sawagani
  • ベストアンサー率73% (19/26)
回答No.2

LEFT関数ですが、「20バイト」ではなく「20文字」を取りにいきます。 UserNameに全角が入っている場合、1文字あたり2バイト使うことになるので、実際は20バイトを超えている、ということはないでしょうか?

mamemamemameko
質問者

お礼

遅くなりました!! byteと勘違いしてました。 おかげできちんととれるようになりました。 ありがとうございました。

  • sawagani
  • ベストアンサー率73% (19/26)
回答No.1

そのメッセージですが、更新対象のカラムのサイズが足りない時に出てきます。 CharNameのサイズが足りてないということはありませんか?

mamemamemameko
質問者

お礼

ご回答ありがとうございます。 CharNameが20byteで更新したいものが40byteだったため、LEFT関数で20byteとってるんですけど・・・ これだとだめなんですかね・・・

関連するQ&A

  • 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.色) どのような記述をすれば良いのでしょうか?

  • SQLServer2000 SQL文について

    SQLServer2000 SQL文について Where句内で、このような演算指定はできますか? できない場合このようなSQLを実行したい場合 他にどのような方法が考えられますでしょうか? select a.id from a,b where a.yymm = b.yymm-1

  • VBAからSqlServerへのUpdate

    EXCEL2003からSqlServer2005へ下記のようなUpdateを実行しました。 Updateの戻り値の取得方法を教えてください。 SQLServerにADOで接続 Dim con As New ADODB.Connection Dim connectionString As String con.Open connectionString For i = 1 To 10 con.Execute ("Update Table1 set FieldA = " & Cells(i, 2).Value & " Where FieldB = " & Cells(i, 1).Value & "") On Error GoTo ErrHandler Next 上記で実行したところ、Where以下の条件を満たさず更新されない場合でもエラーと判断されず、更新されたものと更新されないものの区別がつきません。 条件にあわず更新されなかったものはエラーとして判断させるにはどのように記載すればいいでしょうか。 ご存知の方、よろしくお願いします。

  • ACCESSでのUPDATEコマンド

    現在ASPとACCESSを使用して、開発を行っています。 ORACLEでの開発経験はあるのですが、SQLServerやACCESSでの経験がなく微妙にことなるSQLに困惑しています。 ORACLEではUPDATE時に他のテーブルからデータを参照して更新できると思いますがACCESSで同じようなことはできるのでしょうか?実行したいのはORACLEでいう、以下のようなSQLです。 SQLを2回に分けて実行すれば同じことはできるのですが・・・。 UPDATE TAB_A SET (A,B) = (SELECT A1,B1 FROM TAB_B WHERE C1='10') WHERE C = '10'; 宜しくお願いします。

  • 複数のUPDATE文の実行

    EXCELでUPDATE文を1000行ほど作成して、MySQL QueryBrowser のSQL QueryAreaに貼り付けて一気にUPDATEしたいのですが可能でしょうか? 現在 UPDATE prod Set p_id=239 Where prod_id = 34421; UPDATE prod Set p_id=139 Where prod_id = 34425; UPDATE prod Set p_id=15 Where prod_id = 34428; (と以上の様な内容が1000行ほどあります。) 貼り付けて、1行づつ選択して、Execute ボタンをクリックして実行しています。 初心者の質問かと思いますがどうぞご教授ください。

  • Mysqlのupdate文

    Mysql3.23.42+PHPで下記のようなテーブルで Field| Type ----+------------  a | int  b | varchar  c | varchar  d | timestamp  e | timestamp update文を実行すると、 例  update set b='あ',c='い',e=NULL where a='1'; dまでアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか?

  • UPDATEを同時に実行する

    UPDATE文について質問なんですが、 下記のクエリのように条件の違うものを一度に実行させるということは可能なのでしょうか? UPDATE テーブル名 SET No = '2' WHERE No = '3' ・・・(1) UPDATE テーブル名 SET No = '3' WHERE No = '2' ・・・(2) (1)を実行し(2)を実行すると、期待通りの結果がどうしても得られません。 どなたかわかる方がいらっしゃれば、よろしくお願いしますm(__)m

  • SqlServerのスクリプト実行について

    Windows2003ServerにてSqlServer2005をバッチファイルから実行する時について質問させてください。 下記の「sql.bat」にて「script.sql」を実行した場合、「log.txt」に出力される内容は'222'をアップデートした結果「(x行処理されました)」のみが出力されますが、'000'や'111'を更新した結果も出力させたい場合、「script.sql」を3分割し、「sql.bat」で3ファイル実行するしかないのでしょうか。 「sql.bat」 sqlcmd -S SERVERNAME -d SCHEMANAME -i c:\script.sql -o c:\log.txt 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' update tablename set data1 = 'bbb' where data1 = '111' update tablename set data1 = 'ccc' where data1 = '222'

  • UPDATE文(副問合せ?)について

    うまく説明できないのですが、下記のようなテーブルがあります。 テーブル名:A 項目: A1 A2 A3 A4 AテーブルのA1項目に「5」がセットされているデータについて、 A2に123、A3に321をセットしたいのです。 うまくいかない例ですが、下記のようなイメージです。 UPDATE A set A2=123,A3=321 FROM (SELECT * FROM A WHERE A1 = '5') ちなみに下の書き方はダメです。 「SELECT * FROM A WHERE A1 = 5」の部分は、必ず使用し、変更不可です。 × UPDATE A set A2=123,A3=321 WHERE A1 IN(SELECT A1 FROM A WHERE A1 = 5) 変な質問ですいませんが、何か方法があるのでしょうか。 よろしくお願いします。

  • SQLServer2005のSQL文での別名の取り扱い

    現在VB.net2005とSQLServer2005にてプログラムを組んでいます。 以下のように、サブクエリにて抽出されたStockテーブルと Tagテーブルを結合するSQL文を組みました。 *行頭は列番号です。 01- SELECT * FROM 02- ( 03-  SELECT A1.*, A3.* FROM 04-   ( 05-    SELECT A2.* FROM stock AS A2 06-    WHERE A2.StockDay < #日付#  '【SQLserverで流す時は "CONVERT(DATETIME, '日付')"】 07-    AND A2.ShopCode = '店番号' 08-   ) AS A1 09-  LEFT JOIN tag AS A3 10-  ON A1.StockNo = A3.StockNo 11- ) AS S1 これだとACCESS2000のクエリ上では正しく実行できます。 しかし、.net2005のサーバエクスプローラ上で上記SQL文を流しても、 「列 'StockNo' が 'S1' に複数回指定されました。」 とエラーが出てしまい実行することができません。 行03を "SELECT A1.* FROM" にするとSQLServer2005でも動きますが、 tagテーブルのフィールドが結果に含まれません。 tagテーブルのフィールドも結果に含みたいです。 どなたか原因や回避方法をご存知の方いらっしゃいましたら、 お手数ですが是非ともご教示頂きたいです。 よろしくお願い致します。