Access から SQL Serverへの移行時のクエリについて – プログラミング – Home

通知
すべてクリア

[解決済] Access から SQL Serverへの移行時のクエリについて


不幸一
 不幸一
(@不幸一)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

いつもお世話になります、不幸一です。

早速ですが質問がありますの宜しくお願いします。

環境:WindowsXP、VisualStudioC++6.0、SQL Server2008R2

現在使用しているデータベースがACCESSですが、SQLサーバーへ移行する予定です。
データベースは変換され問題無いのですが、ODBC接続でSQLを実行している部分が上手く
実行されません。
SQL分は以下の通りです。

SELECT DISTINCT (Left(Type,4)='ABC_' Or Left(Type,4)='XYZ_') AS TypeIsAlpha FROM
[TestDb].[dbo].[Variable];

SQLServerで実行しても以下のエラーとなります。エラーから推測するにLeft関数の戻り
値で文字列比較をしている部分にあると思いますが、この場合どのように修正すればいい
のか分かりません。ネットでもいろいろ調べましたが類似の問題が無く困っております。
どうかお助けください。

メッセージ 102、レベル 15、状態 1、行 1
'=' 付近に不適切な構文があります。


引用未解決
トピックタグ
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

SELECTなどの基本的な構文はともかく、拡張的な部分では、
DBエンジンによって、SQL文は異なります。

Left()などの構文は文法が変わる恐れがあります。
一度、渡しているSQL文をSQL Server上でクエリーとして実行してみて下さい。
エラーメッセージで分かるかも知れません。

分からないようなら、
SQL Server関連の会議室で質問すると良い回答が得られるかも知れません。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

よく見たら、
Left(Type,4)='ABC_' Or Left(Type,4)='XYZ_'
の部分ってWHERE句なのでは?


返信引用
不幸一
 不幸一
(@不幸一)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

bunさん
回答ありがとうございます。

SQLサーバー上で実行した結果は

メッセージ 102、レベル 15、状態 1、行 1
'=' 付近に不適切な構文があります。

でした。

>よく見たら、
> Left(Type,4)='ABC_' Or Left(Type,4)='XYZ_'
>の部分ってWHERE句なのでは?
ACCESSの作成者がもうすでにいないので分かりませんがそもそも間違っているのでしょうか?


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

> ACCESSの作成者がもうすでにいないので分かりませんが
> そもそも間違っているのでしょうか?
そんな気がします。

> Left(Type,4)='ABC_' Or Left(Type,4)='XYZ_'
だと論理式なので、結果は真偽値でしかない。
それを表示したいのなら、それでいいのですが。
どうなんでしょう?

ちなみに、
> AS TypeIsAlpha
だから、そうととれなくも無い。

エラーメッセージの意味ですが、
私は、データベースは AccessとOracleしか使ったことが
無いので、SQL Serverのクエリーは分からないです。
すいません。


返信引用
不幸一
 不幸一
(@不幸一)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

bunさん
回答ありがとうございます。

>> Left(Type,4)='ABC_' Or Left(Type,4)='XYZ_'
>だと論理式なので、結果は真偽値でしかない。
>それを表示したいのなら、それでいいのですが。
>どうなんでしょう?
おっしゃるとおりです。
結果の真偽値を別名列で表示させたいのです。

WHERE句にも入れてみましたがやはり思った通りの結果は得られませんでした。
何か良い方法ありませんでしょうか、宜しくお願い致します。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

クエリの内容についてはここの例Bを参考にしてみてください。
http://msdn.microsoft.com/ja-jp/library/ms181765.aspx


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

CASE式で振り分けてしまえばよいでしょう。

MSDN: 比較演算子 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188074.aspx
> 比較演算子の結果は Boolean 型になります。有効値には、TRUE、FALSE、UNKNOWN があり
ます。Boolean 型を返す式は、ブール式とも呼ばれます。
> Boolean データ型は SQL Server の他のデータ型と異なり、テーブルの列や変数のデー
タ型として指定することはできず、結果セットで返すこともできません。
なので,比較結果をそのままSELECTで返せません。
が,CASE式を使ってBoolean型を適当な値にしてしまえば結果セットで返せます。

ref)
MSDN: CASE (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms181765.aspx
Site: CASE式のススメ - リレーショナル・データベースの世界 - ミックのページ
http://www.geocities.jp/mickindex/database/db_case.html


返信引用
不幸一
 不幸一
(@不幸一)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

subaruさん
YuOさん

回答ありがとうございます。
アドバイス通りにCASE分を利用すれば簡単に出来ました。
いろいろと有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました