- - PR -
連結したSQL文が実行できない。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-22 14:29
WindowsXP SP2
MSSQLServer2000 こんにちは。 ただ今、このSQL文が実行できなく悩んでいます。 ※SQL Server 2000のNorthwindサンプルデータベースを使用しています。 <成功> declare @CustomerID nvarchar(5) set @CustomerID = 'ALFKI' select CompanyName from Customers where CustomerID = @CustomerID 結果:CompanyName = "Alfreds Futterkiste" 上記例では成功するのですが、 <失敗> declare @str_sql varchar(100) declare @CustomerID nvarchar(5) set @CustomerID = 'ALFKI' set @str_sql = 'select CompanyName from Customers where CustomerID = ' + @CustomerID exec (@str_sql) 上記例では失敗してしまいます。 これは例として短くしていますが、 実際は絞り込み条件が動的に変化するので、 このようにSQL文を連結して実行させなければなりません。 どなたかご教授お願いします。 [ メッセージ編集済み 編集者: hana 編集日時 2005-04-22 14:30 ] | ||||||||
|
投稿日時: 2005-04-22 14:36
で出来るSQL文って 「select CompanyName from Customers where CustomerID = ALFKI」 ってなりませんか? CustomerIDが文字列ならば、ALFKIを''で囲まないとSQLエラーになると思います。 | ||||||||
|
投稿日時: 2005-04-22 14:44
夏椰さん返信ありがとうございます。
set @CustomerID = 'ALFKI'としているので、 ''付きで代入されていると思うのですが。。。 ちなみにエラーメッセージは 「列名 'ALFKI' は無効です。」と表示されます。 | ||||||||
|
投稿日時: 2005-04-22 14:47
以下のようなSQL文にしてみましたが、 データがあるにも関わらず、検索結果は0件でした。 set @str_sql = 'select CompanyName from Customers where CustomerID ='' + @CustomerID + ''' | ||||||||
|
投稿日時: 2005-04-22 15:08
今日は。
ちょっと実験してみました。 declare @CustomerID nvarchar(5) declare @Test nvarchar(100) declare @Test1 nvarchar(100) set @CustomerID = 'ALFKI' set @Test ='select CompanyName from Customers where CustomerID =' set @Test1= @Test+ @CustomerID Print @CustomerID Print @Test Print @Test1 とやって一応入っている物を表示させると ALFKI select CompanyName from Customers where CustomerID = select CompanyName from Customers where CustomerID =ALFKI となります。 なので
つまり @CustomerIDが文字列として入ってないって事ですね 本来 select CompanyName from Customers where CustomerID ='ALFKI' という文字列にならなければいけない訳です。 だからエラーになる訳で @CustomerIDに'ALFKI'という文字列を入れなければいけない訳ですね。 ※で、'ってどうやって文字列として入れるんだったっけ(^^ゞ _________________ Inspired Ambitious ISMS Assistant Auditor | ||||||||
|
投稿日時: 2005-04-22 15:25
set @CustomerID = '''ALFKI''' でいれれました(^^) #サイズを増やすのを忘れて引っかかってましたあほな自分(^^; | ||||||||
|
投稿日時: 2005-04-22 15:26
NAOさん、ご協力ありがとうございます。
NAOさんを真似て、 Print @Customer を成功した方に追加してみたところ、結果は ALFKI となりました。 同じ結果なのに、どうしてこっちは文字列として認識しているのでしょうか。 もう分からなくて泣きそうです... | ||||||||
|
投稿日時: 2005-04-22 15:31
夏椰さん、返信ありがとうございます。
実際には、@CustomerIDはストアドプロシージャの引数として 受け取ったものが入るのですが、 この場合、SQL文の方を加工した方がいいのでしょうか。 [ メッセージ編集済み 編集者: hana 編集日時 2005-04-22 15:32 ] | ||||||||
