2012-10-10 11 views
2

У меня проблемы с заданием, заданным мне в задании. Мой лектор не самый лучший, объясняя вещи так, как я понимаю, поэтому я надеюсь, что смогу помочь.Написание хранимой процедуры с инструкцией вставки с неограниченными параметрами

Это вопрос, который мы получили:

Построить хранимую процедуру для вставки данных в таблицу ключевых слов. Формат входной строки должен быть (Тема_имя, 'K1, W1, K2, W2, K3, W3 ... Kn, Wn'). Ks - это ключевые слова, а Ws - вес. Если имя темы не может быть найдено в таблице «Тема», вам необходимо сначала вставить имя новой темы в таблицу «Тема», а затем вставить другие данные в таблицу ключевых слов. Ваша хранимая процедура всегда должна проверять шаблон строки, чтобы убедиться, что он правильно отформатирован и используются правильные типы данных. Предоставьте сообщение обратной связи пользователю, если шаблон строки недействителен.

Это мое ключевое слово стол:

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 подсчитать, сколько параметров пользователь включил. Любая помощь, которую я мог бы получить, будет очень признательна. Если вам нужна дополнительная информация, просто дайте мне знать. Приветствия.

+0

возможно дубликат (http://stackoverflow.com/questions/ 2485526/how-to-pass-a-variable-of-parameters-to-a-sql-server-stored-procedure) –

+1

Какова ваша РСУБД? – Parado

+0

Упс, извините. Я использую SQL Server 2008. – kelsothenerd

ответ

0

Это позволит получить ты начал. Он разбирает разделенный запятыми список значений во временную таблицу: [? Как передать переменное количество параметров хранимой процедуры SQL Server]

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 
+0

Закончено с использованием этого варианта, добавив в столбец идентификатора чтобы облегчить мне жизнь. Теперь, чтобы выяснить, как изменить временную таблицу, чтобы вставить информацию в таблицу ключевых слов! Спасибо за вашу помощь. – kelsothenerd

0

Насколько я понимаю, ваша процедура будет иметь только один параметр строки. Затем вы разбираете эту строку внутри хранимой процедуры (смотрите запятые) и обрабатываете каждый параметр до конца строки.

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 
Смежные вопросы