2012-06-01 1 views
0

Я хочу, чтобы создать хранимую процедуру SQL Server, как это:SQL тип данных для использования в строку фразу

CREATE PROCEDURE dbo.uspGetCharacterID        
    (@characterName vchar(1000)) 
as    
    SELECT c.charatcer_full  
    FROM CHARACTER c (nolock)  
    WHERE character_full IN (@characterName)  
    ORDER BY C.characterID 

От кода, @charactername Я передаю ->'Batman in latest movies', 'Superman in latest movies'

Но в коде его возвращения к нулю строк.

ПРИМЕЧАНИЕ. Если я запускаю тот же запрос выбора в SQL с этой строкой, он успешно возвращает две строки.

ВОПРОС: какой тип данных следует использовать, чтобы требования удовлетворялись?

'Varchar' и 'Text' не работал.

Пожалуйста, руководство

Благодарности

+0

Будет ли эта строка представляет данные в одной записи * Бэтмен в последних фильмах, Супермен в последних фильмах * –

+0

tabele «Характер», «Бэтмен в последних фильмах» есть 1 строка и «Супермен в последних фильмах» имеет 1 строку. Таким образом, выполнение вышеуказанного запроса возвращает две строки. – Kings

+1

Речь идет не о типе данных - дело в том, что вы не можете сделать это так, как вы это делаете. Вы не можете передать список строк в качестве «varchar», а затем использовать те, которые содержатся в конструкте '.. IN (....)'. Не работает так. См. [Этот другой вопрос SO] (http://stackoverflow.com/questions/2866577/passing-delimited-string-to-stored-procedure-to-search-database), который занимается этой проблемой, и см. Ответ, предоставленный 'KM.' - вот как это сделать. –

ответ

1
CREATE TYPE tp_names AS 
     TABLE 
     (
     name VARCHAR(1000) NOT NULL 
     ) 

GO 

CREATE PROCEDURE 
     uspGetCharacterID (@names tp_names READONLY) 
AS 
     SELECT c.character_full  
     FROM CHARACTER c 
     WHERE character_full IN 
       (
       SELECT name 
       FROM @names 
       ) 
     ORDER BY 
       characterID 

GO 

DECLARE @names tp_names 

INSERT 
INTO @names 
VALUES 
     ('Batman in latest movies'), 
     ('Superman in latest movies') 

EXEC uspGetCharacterID 
       @names = @names 
Смежные вопросы