jamshid6 の回答履歴

全1251件中1~20件表示
  • 2つのテーブルに差異があるデータを抽出する方法

    このようなことが実現できるのかというご相談です。 ご存知の方がいらっしゃいましたらご教授ください。 環境はSQL Server2008です。 2つのテーブルがあります。 1度のSQLでその2つを比較し、以下の条件のデータを抽出することは可能なものでしょうか? (1)テーブルAに存在するが、テーブルBにはない (2)テーブルBに存在するが、テーブルAにはない (3)テーブルAとBの両方に存在するが、項目のいずれかが異なる。 なお、テーブルBには、テーブルAには存在しない項目がありますが、 その項目は比較対象外です。 お知恵を拝借できましたら、とてもありがたいです。 よろしくお願いいたします。 ■テーブルA Key Komoku1 Komoku2 001 1000 2000 002 2000 3000 005 3000 4000 006 4000 5000 ■テーブルB Key Komoku1 Komoku2 Komoku3 001 1000 2000 X1 003 2000 3000 X2 005 3000 5000 X3 006 4000 5000 X4 ■結果 Key Komoku1 Komoku2 002 2000 3000 003 2000 3000 005 3000 4000 (あるいは 005 3000 5000) ※005はテーブルA,B両方には存在するが、koumoku2の値が違う例です。 その場合、どちらのテーブルの値を出力しても構いませんし、あるいは両方を 出力しても構いません。 よろしくお願いいたします。

  • OPENROWSET関数を使用したインサート方法

    現在「vs.net2010 C#」を使用してプログラムを作成しております。 連携するデータベースに「SQL server2010 R2」を使用し、以下の構成のエーブルへデータをインサートしたいと思っているのですが、2点どうしても解決出来ない問題が発生してしまいどうにも原因が分からない状態です。 初心者の為、初歩的な事があまり分かっておらず、大変恐縮ですが、対応方法をご存じの方がいらっしゃいましたら、ご教授頂ければと思います。 ■テーブル構成 テーブル名:test ・ID UNIQUEIDENTIFIER PRIMARY KEY ・FILE_NAME1 VARCHAR(20) ・FILE_DATA1 VABINARY(MAX) ・FILE_NAME1 VARCHAR(20) ・FILE_DATA1 VABINARY(MAX) ■発生している問題 (1)webアプリの画面からファイルを参照し、そのファイルパスを取得し、インサートの際に利用しているのですが、パスの間にスペースが入っている為か下記のようなエラーが発生してしまいます。 ・実行SQL insert into test (ID ,FILE_NAME1 ,FILE_DATA1 ,FILE_NAME1 ,FILE_DATA1) select NEWID() ,null ,null ,'Book1.xls' ,x.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book1.xls', SINGLE_BLOB)AS x 「ファイル"ファイルパス"を開けなかったので、一括読み込みできません。オペレーティングシステムエラーコード 5(アクセスが拒否されました)」 C:直下等にファイルを移し実行すると正常にインサート出来るので、パスのスペースが原因だと考えているのですが、解決策を調べてもよくわかりませんでした・・・ (2)インサートの際に「VABINARY」列が複数ある時の記述方法について 1 insert into test 2 (ID 3 ,FILE_NAME1 4 ,FILE_DATA1 5 ,FILE_NAME1 6 ,FILE_DATA1) 7 select 8 NEWID() 9 'Book1.xls' 10 ,x.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book1.xls', SINGLE_BLOB)AS x 11 ,'Book2.xls' ,12 y.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book2.xls', SINGLE_BLOB)AS y 上記のように「VABINARY」列が複数ある時に、上の9.10行目は問題ないようなのですが、以下の11.12行目が構文エラーとなってしまいす。 本当は12行目以降にも、新しく列を作成し、インサートしたいと思っておりますが、10行目以降は 初歩的な記述方法の問題かとは思うのですが、自身の理解不足も相まって調べても解決できない状態です。 どなたかお力をお貸し頂けませんでしょうか? 以上、宜しくお願い致します。

  • LOCK_ESCALATIONオプションの確認方法

    LOCK_ESCALATIONオプションが設定されているか否かが わかるSQLを教えてください。 SQL Server 2008になってから、ロックのエスカレーションの無効化を テーブル単位に行えるようになった事を知りました。 具体的には以下のSQLにてできるようです。 ALTER TABLE TBL01 SET ( LOCK_ESCALATION = DISABLE ) セットの方法はわかったのですが、「今どうなっているか」を知る方法は ないものでしょうか? どなたかご存知の方いらっしゃいましたら教えてください。

  • UPDATEの更新前の値を取得したい

    SQLServer2008を使用して、 UPDATEの更新前と更新後の差分を出そうとしているのですが、 更新前の値が取れません。 更新後の値はOUTPUT句を使用してINSERTED.XXXでとっています。 更新前の値もOUTPUT句を使用してDELETED.XXXでとれるのかと思い試したら INSERTED.XXXと同じ値(更新後の値)が取れてしまいました。 selectをしずに、更新前の値を取得する方法はありますでしょうか? ご存知の方ご教授お願いいたします。

  • SQLサーバ2008でのクエリについて

    初心者ですが、よろしくお願いします。 Access 同様のクエリ操作が出来るのでしょうか? 例)グループ化、抽出設定、関数の使用、更新・テーブルクエリ 等

  • VB2008 SQL ServerのDB名一覧取得

    VB2008 で開発をしています。 SQL ServerからDB名の一覧を取得する処理で、うまく行かず悩んでいます。 ロジックは以下の通りです。 Dim cnString As String Dim Scn As ADODB.Connection Dim Srs As ADODB.Recordset Scn = CreateObject("ADODB.Connection") cnString = "Driver={SQL Server};" cnString = cnString & "Server=" & strServerNM & ";" cnString = cnString & "UID=" & strServerUID & "; Pwd=" & strServerPassWD & ";" Scn.Open(cnString) Srs = Scn.Execute("SELECT NAME FROM sysdatabases ORDER BY NAME ;") If Srs.RecordCount = 0 Then   MsgBox("データベースが存在しません。") Else   Do Until Srs.EOF = True     MsgBox(Srs.Fields("Name").ToString)     Srs.MoveNext()   Loop End If   実行すると、DB名ではなく、"System._ComObject"という文字が複数回(おそらくDBの数)表示されます。   どなたかおわかりになる方、おられましたらよろしくお願い致します。

  • select into句のトランザクションについて

    お世話になってます。 sqlについて質問です。 ddlを発行するとトランザクションは暗黙的にコミットされると思いますが、 select into #temptable ・・・ のように、select into 句で一時テーブルを作成した場合、トランザクションはどうなるのでしょうか? また、以下のように一時テーブルと普通のテーブルで挙動は変わりますか? begin transaction select into #temptable from A ← ここでコミットされてしまう? …(1) select into temptable from A ← ここでコミットされてしまう? …(2) rollback transaction 以上、よろしくお願いいたします。

  • SQLServer2005 実行したクエリ

    SQLServer2005にて実行したクエリを取得したいと考えています。 条件としては、実行したクエリとそれを実行したSPIDを取得できればと考えております。 接続が切れた時点で実行したクエリが消えてしまうので、別テーブルを用意して登録しておければ最高です。 理想としては、クエリが実行されたら用意したテーブルに実行したクエリとSPIDを書き込むといったかんじです。 しかし、システムテーブル、システムビューにトリガは付けられないようで困っています。 どなたかわかる方がいらっしゃったらよろしくお願いいたします。

  • SQL Serverトリガの中でDMLの種類判断

    SQL Serverのトリガの中で、DMLの種類(INSERT/UPDATE/DELETE)を取る方法ってありますか? こんにちは。アべです。 下記のようなトリガを作成して、操作(INSERT/UPDATE/DELETE)の履歴を 残したいのですが、トリガを3本に分けるのもあれなので、 操作の種類(INSERT/UPDATE/DELETE)を履歴用のテーブルに入れたいのですが、 書き方がわかりません。 取得方法のやり方を教えてもらえないでしょか? CREATE TRIGGER [mst].[TriggerUserActionHistory] ON [mst].[User] AFTER INSERT, UPDATE, DELETE NOT FOR REPLICATION AS BEGIN SET NOCOUNT ON; --ACTION TYPE未設定 ↓今はINSERT固定しかできない。 insert into [history].[User] select 'INSERT',getdate(),* from inserted; END GO

  • ストアドの一時テーブル格納について

    ストアドの一時テーブル格納について SQLServer2000を使用しています。 sp_help_jobの結果セットを一時テーブルにいれたく、 以下のようなスクリプトを作成しています。 -------------- create table #tbl (  列名  ・  ・  ・ ) Insert into #tbl msdb.dbo.sp_help_job -------------- スクリプトを実行すると、以下のエラーでInsertに失敗します。 「メッセージ 8164、レベル 16、状態 1、プロシージャ sp_get_composite_job_info、行 72 INSERT EXEC ステートメントは入れ子にはできません。」 上記の改善策についてアドバイス頂けないでしょうか。 よろしくお願いします。

  • SQLServer(2005)でビューの作成がうまくいきません。

    SQLServer(2005)でビューの作成がうまくいきません。 インデックス を作成できません。ビューでは別のビュー 'View1' が参照されています。インデックス付きビューの定義で参照されるビューの定義を手作業で拡張することを検討してください。 というエラーが出ます。(参照しているビュー’View1’にもインデックスが設定されています) このエラーの回避策をご存知であれば、教えていただきたいと思います。 よろしくお願いいたします。

  • SQL SEREVER で選択した固定値との結合について質問です。

    SQL SEREVER で選択した固定値との結合について質問です。 日付と紐付けたデータを1ヶ月分出力するSQLを作成しています。 紐付け対象となるデータに、1ヶ月毎日のデータが存在するわけではありません。 そこで、固定値として2010年7月であれば、 2010-07-01~2010-07-31 までの日付を全て固定値として取得 (対象データは行で取得したいのでUnionで繋いでいく)して、 その日付と紐づく対象データを外部結合しようと考えました。 SqlServerの場合、固定値のみを取得した場合 ダミーテーブルを使用するということができないようなので、 取得した固定値との紐付け時に下記???のところの指定がわかりません。 Select '2010-07-01' 日付 Left Join 結合対象テーブル On 結合対象テーブル.日付 = ???.日付 他のやり方で実現可能なのかもしれませんが、調べてもわかりませんでした お解りになる方いらっしゃいましたら、教えていただければと思います。

  • T-SQLで10万件程度のInsert処理を記述したい。

    T-SQLで10万件程度のInsert処理を記述したい。 カーソルを利用したループ処理の中で、 Insert失敗時(エラー時)のみ、そのデータだけスキップし、 次のデータ登録処理に進みたい場合、 どのように記述すればよいのでしょうか。

  • ビュー定義をプログラムで動的に扱う方法

    ビュー定義をプログラムで動的に扱う方法 SQLServer2008+VB6(ExcelVBA)構成のシステムで、日付フィールドを含むテーブルのビューを作成しておき、VBプログラムから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 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。

  • ビュー定義をプログラムで動的に扱う方法

    ビュー定義をプログラムで動的に扱う方法 SQLServer2008+VB6(ExcelVBA)構成のシステムで、日付フィールドを含むテーブルのビューを作成しておき、VBプログラムからSQL文でビューを呼び出す時、日付範囲を指定して絞り込まれた結果をビューで返したいのですが、ストアドを使わずにビューだけで実現することはできないでしょうか?

  • 抽出対象の1レコードを複数レコードへ変更し出力する方法を

    抽出対象の1レコードを複数レコードへ変更し出力する方法を SQLで教えてください。(SQLServer2000です。) <イメージ> 店番 顧客番号 年月  A B C D ・・・(Dのあと100項目つづく)・・・ 1000 12345678 200909 10 20 30 40 2000 12345678 200910 30 40 50 60 を 店番 顧客番号 年月  AからD 1000 12345678 200909 10 1000 12345678 200909 20 1000 12345678 200909 30 1000 12345678 200909 40 2000 12345678 200910 30 2000 12345678 200910 40 2000 12345678 200910 50 2000 12345678 200910 60 と出力したいのですが、SQLServer2000ではPIVOT等が使用できず。 抽出処理が思いつきません。 パフォーマンスも悪くなったりしますか。 何か良い方法をご教示ください、よろしくお願い致します。

  • ストアドから特定のキーワードを含むストアドを探したい

    ストアドから特定のキーワードを含むストアドを探したい 沢山のストアドの中から「union」を使っているストアドをだけを 検索する方法はありますか? (名称ではなく、ストアドの中身(コード)を検索したい)

  • SQL Server 2005 Management Studioに関

    SQL Server 2005 Management Studioに関する質問です クライアントにSQL Server 2005 Management Studioをインストールし、SQL Server 2005 Standard SP2が入っているDBサーバーに接続していました。 今度SQL Server 2008 Enterprise R2がインストールされたDBサーバーが同ネットワーク内(同じサブネット内)に新設された為、クライアントから接続を行いたいのですが、接続が行えません。 →接続画面にてネットワーク越しにサーバーは認識していますが、ユーザー名・パスワードを入力して接続ボタンを押下するとエラーで返ってきます。 →クライアント側のFWは無効にしており、新設DBサーバー側のSQL Serverでもリモート接続を許可しています。 SQL Server 2005 Management StudioからSQL Server 2008へ接続はできないとおっしゃられている方もいらっしゃいますが、確たる証拠もなくて信じて良いのかわかりません。 どなたか解決方法含めてご存知の方いらっしゃいますでしょうか?

  • SQLの質問です。

    SQLの質問です。 SQL Server 2008 R2 を使っている初心者です。 下の2つのテーブルがあります。 1)売上情報 table_uriage ・uriage_id ・user_id ・uriage_date ・uriage_kingaku 2)入金情報 table_nyukin ・nyukin_id ・user_id ・nyukin_date ・nyukin_kingaku この2つのテーブルに対して、同じ期間を指定して、集計表(ユーザー毎の合計)を 作りたいと思っています。別々の表にするには何の問題もないのですが、 問題は2つのSQLの結果を1つの表にしたいのですが、SQLをどのように組んだらいいか わかりません。 具体的な表としては、 user_id uriage_total nyukin_total ======================================== 001 11111 22222 002 33333 44444 003 55555 66666 みたいな感じになればいいのです。 どなたか教えて下さい。 よろしくお願いいたします。