2

課題で出された質問に少し問題があります。私の講師は、私が理解できる方法で物事を説明するのが得意ではないので、ここで助けが得られることを願っています。

これは私たちが与えられた質問です:

キーワードテーブルにデータを挿入するためのストアドプロシージャを作成します。入力文字列の形式は(Topic_name、'K1、W1、K2、W2、K3、W3…Kn、Wn')である必要があります。Kはキーワードで、Wは重みです。トピック名がトピックテーブルに見つからない場合は、最初に新しいトピック名をトピックテーブルに挿入し、次に他のデータをキーワードテーブルに挿入する必要があります。ストアドプロシージャは、文字列パターンを常にチェックして、正しくフォーマットされ、正しいデータ型が使用されていることを確認する必要があります。文字列パターンが無効な場合は、ユーザーにフィードバックメッセージを提供します。

これは私のキーワードテーブルです:

CREATE TABLE Keyword(
    Topic_Name  VARCHAR(30) NOT NULL,
    Keyword VARCHAR(30) NOT NULL,
    K_weight    INT     NOT NULL,
    PRIMARY KEY(Topic_Name, Keyword),
    FOREIGN KEY(Topic_Name) REFERENCES Topic);

私が抱えている主な問題はパラメータにあります。ユーザーが含めたパラメーターの数をSPにカウントさせる方法がわかりません。私が得ることができるどんな助けでも大いに感謝されるでしょう。追加情報が必要な場合は、お知らせください。乾杯。

4

3 に答える 3

0

私が理解している限り、プロシージャには文字列パラメータが1つだけあります。次に、ストアドプロシージャ内でこの文字列を解析し(コンマを探します)、文字列の最後まで各パラメータを処理します。

于 2012-10-10T07:02:03.627 に答える
0

以下のように一時テーブルを使用できます。

「配列」を期待する手順:

create table #array
(
  value1 varchar(30),
  value2 varchar(30)
)
go

create procedure myproc
as
begin

  select * from #array

end
go

drop table #array

go

プロシージャは配列を入力してmyprocに送信します。

create procedure myproc2
as
begin

  create table #array
  (
    value1 varchar(30),
    value2 varchar(30)
   )
  --fill an array             
  insert into  #array values ('A','B')      
  insert into  #array values ('C','D')

  exec myproc

  drop table #array
end

go

そしてあなたはそれを実行することができます:

exec myproc2
于 2012-10-10T07:33:08.160 に答える
0

これで始められます。値のコンマ区切りリストを一時テーブルに解析します。

DECLARE @KeywordList varchar(max) //This can be a SP param

CREATE TABLE #Keywords(varchar(10) keyword NOT NULL); 

DECLARE @Keyword varchar(10), @Pos int

SET @KeywordList= LTRIM(RTRIM(@KeywordList))+ ','
SET @Pos = CHARINDEX(',', @KeywordList, 1)

--Parse varchar and split IDs by comma into temp table
IF REPLACE(@KeywordList, ',', '') <> ''
BEGIN
    WHILE @Pos > 0
    BEGIN
        SET @Keyword= LTRIM(RTRIM(LEFT(@KeywordList, @Pos - 1)))
        IF @Keyword <> ''
        BEGIN
            INSERT INTO #Keywords(ID) VALUES (@Keyword) 
        END
        SET @KeywordList = RIGHT(@KeywordList, LEN(@KeywordList) - @Pos)
        SET @Pos = CHARINDEX(',', @KeywordList, 1)

    END
END 

--Return a count of all rows
SELECT @TotalRows = COUNT(Keyword) FROM #Keywords; 

    --Now process data from #Keywords as required
于 2012-10-10T07:33:32.057 に答える