Date: Tue, 1 Aug 2000 13:10:54 +0900
From: "Madoka Takai" <who@sub.example.jp>
FOX-SSさん こんにちは 高井です。
以下でテストしてみました。
私の環境NT4.0WS+SP6a+MSDE SP2です。
CREATE TABLE [dbo].[部品使用TBL] (
[登録ID] [char] (3) NOT NULL ,
[利用者ID] [char] (8) NULL ,
[部品1] [int] NULL ,
[部品2] [int] NULL ,
[部品3] [int] NULL ,
[部品4] [int] NULL ,
[部品5] [int] NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[部品使用TBL] WITH NOCHECK ADD
CONSTRAINT [PK_部品使用TBL] PRIMARY KEY NONCLUSTERED
(
[登録ID]
) ON [PRIMARY]
Create procedure usp_GetItemNum
@aRecID int, @aUserID char(8), @aItemNum int output
as
declare @wIdx int
declare @wWork int
declare @wSql nvarchar(256)
DECLARE @ParmDefinition NVARCHAR(500)
SET @ParmDefinition = N'@wWork int'
set @wIdx = 1 --reset value
set @aItemNum = 0 --reset value
while @wIdx <= 5 --部品1〜100という列が存在するテーブル
begin
-- set @wSql = N'select 部品' + Ltrim(Str(@wIdx)) +
set @wSql = N'select @wWork = 部品' + Ltrim(Str(@wIdx)) +
N' from 部品使用TBL' +
N' where 登録ID = ' + cast(@aRecID as nvarchar(3)) +
N' and ' + N'利用者ID = ' + N'''' + @aUserID + N''''
-- exec sp_executesql @wSql
exec sp_executesql @wSql, @ParmDefinition, @wWork = 0
if @wWork = 123 --アイテム123を使っている部品番号を得る
begin
set @aItemNum = @wIdx
break
end
SET @wIdx = @wIdx + 1
end
return
クエリアナライザで
exec usp_GetItemNum 登録ID,利用者ID,0
で動かしました。
> exec sp_executesql @wSql, @ParmDefinition, @wWork = 0
>サーバーメッセージ 137、レベル 15、状態 1、行1
>変数 '@wWork' を宣言する必要があります。
のメッセージはでないです。
やはり部品1から100は別テーブルで...
ストアドなりなんやらの方が良いのかも?
sp_executesql を時々使用しますが このような使い方は、
やったことがないので、お役に立てなくて...
では
--------------------------------------------------
株式会社 TRUE 高井 円
URL: www.trueheart.co.jp (ほとんど工事中)
Mail: who@example.co.jp
--------------------------------------------------
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|