SQLserver2005を使っています。
下記のようなテーブルがあります。
ID 処理番号 日付 Data
AA 1 2008/1/1 10
AA 1 2008/1/2 11
AA 1 2008/1/3 12
AA 2 2008/1/4 13
AB 3 2008/1/5 14
AB 3 2008/1/6 15
AB 4 2008/1/7 16
この時に「IDと処理番号が一致した場合、日付の一番古い行を抜き出す」
という条件でデータの抽出をすることは可能でしょうか
結果は下記のようになります。
ID 処理番号 日付 Data
AA 1 2008/1/1 10
AA 2 2008/1/4 13
AB 3 2008/1/5 14
AB 4 2008/1/7 16
下のような命令文を作ったのですが、
「Data列」が抜き出せません。
select ID,処理番号,min(日付) from テーブルA
Group by ID,処理番号
一度上の命令文でテーブルを作って元のテーブルとマッチングさせるしかないのでしょうか?出来れば一発で抜き出したいです。
ご教授宜しくお願いします。
ストプロ内でxp_cmdshellを使用し、vbsファイルを実行したいのですが実行できません。
vbsファイルはxp_cmdShellでキックされたらSQLサーバのデータをSELECTし、テキストファイルにSELECTで取得した行数だけ行を追加するという内容です。
vbsファイルはコマンドプロンプトから実行すると動くので正しいと思います。
ストプロにはvbsファイル実行の前後にtableのupdate作業があり、
その2つは行われます。しかし、書き出されるはずのデータがテキストファイルに書き出されません。
vbsファイルは実行されていないようですがエラーは出ず正常終了となり、
xp_cmdshell実行後の戻り値は0で成功となっています。
xp_cmdshellオプションは有効になっており、は混合モードでSysAdminの権限を持つユーザーで処理をしています。
また、ストプロではなく、SQLServerManagementStudioから下記のようにvbsファイル実行しようとした場合、エラーなく正常終了するのですがテキストファイルにデータは追加されていません。
EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
しかし、EXEC xp_cmdshell 'dir *.exe'は実行できます。
vbsファイルをxp_cmdshell で実行するときは何か特殊な記述が必要なのでしょうか。何がいけないのかわからず困っております。お気づきのことがありましたらご指摘いただけますようお願い致します。
以下にストプロの中身をを記述します。
BEGIN
SET NOCOUNT ON;
-- テーブルのアップデート処理
UPDATE table1 SET Status = 1
WHERE Status = 0
--ファイル書き出しvbsの実行
DECLARE @result int
SET @result = 1
EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
--ここは下記のようにCscriptを抜いても試しましたがだめでした。
--EXEC @result = exec master..xp_cmdshell 'c:\AddRow.vbs'
IF (@result = 0)
BEGIN
--xp_cmdshellの実行が成功したときのみこの処理に入る予定。
--実際は実行されていないようだが@result が0なのでこの処理を行っている。
UPDATE table1 SET Status = 2
WHERE Status = 1
END
END
WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。
create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;
次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON directory dir to username;
また、grant READ,WRITE ON directory dir to public;
とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。
何か間違っておりますでしょうか?
それとも何か手順で足らないものがあるのでしょうか?
ご教示いただければと思います。
WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。
create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;
次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON directory dir to username;
また、grant READ,WRITE ON directory dir to public;
とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。
何か間違っておりますでしょうか?
それとも何か手順で足らないものがあるのでしょうか?
ご教示いただければと思います。
WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。
create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;
次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON directory dir to username;
また、grant READ,WRITE ON directory dir to public;
とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。
何か間違っておりますでしょうか?
それとも何か手順で足らないものがあるのでしょうか?
ご教示いただければと思います。