Bonjour,
Est ce que quelqu'un peut m'aider, car j'ai un petit soucis : j'ai une PS :
à cette PS je voudrais ajouter un paramètre de type VARCHAR qui contiendra éventuellement une liste d'id ('7,5,8,9') donc je voudrais ajouter ce test dans la clause where :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 CREATE PROCEDURE [dbo].[sp_document_select] @doc_id INT =NULL, @prj_id INT =NULL, @per_id INT = NULL, @tsk_id INT = NULL, @sta_id INT = NULL, @dot_id INT = NULL, @sys_id INT = NULL, @doc_status BIT = 1, @doc_connected BIT = NULL, @dot_code char(10) = NULL AS BEGIN SELECT doc.*, dov.*,dot.*,sta.sta_color,sta.sta_name,per.org_id,per.per_firstname + ' ' + per.per_lastname as 'fullname',document_task.* FROM dbo.document doc INNER JOIN document_version dov ON dov.doc_id = doc.doc_id AND dov.dov_iscurrent = 1 --récuperer tjr la version courante du document INNER JOIN document_type dot ON dot.dot_id = doc.dot_id LEFT JOIN state sta ON sta.sta_id = doc.doc_state INNER JOIN person per ON per.per_id = doc.per_id_owner LEFT JOIN document_task ON document_task.doc_id = doc.doc_id WHERE (doc.prj_id=@prj_id OR @prj_id IS NULL) AND (doc.doc_id=@doc_id OR @doc_id IS NULL) AND (doc.doc_status=@doc_status OR @doc_status IS NULL) AND (@sys_id IS NULL OR EXISTS(SELECT 1 FROM document_system where document_system.sys_id = @sys_id AND document_system.doc_id = doc.doc_id)) AND (@tsk_id IS NULL OR EXISTS(SELECT 1 FROM document_task where document_task.tsk_id = @tsk_id AND document_task.doc_id = doc.doc_id)) AND (sta.sta_id=@sta_id OR @sta_id IS NULL) AND (dot.dot_id=@dot_id OR @dot_id IS NULL) AND (doc.doc_connected=@doc_connected OR @doc_connected IS NULL) AND (dot.dot_code=@dot_code OR @dot_code IS NULL) ORDER BY doc.doc_name ASC END GO
sauf que cela bien sûr ne marche pas, si je veux garder la requête en direct (sans passer par un exec).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (AND doc_id IN (' + @IdsList + '))
J'ai pensé à faire ceci :
et rajouter un test à ma première requête de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DECLARE @tmp_document_list TABLE(doc_id INT); DECLARE @IdsList varchar(100) DECLARE @query varchar(2000) set @IdsList = '7,6,5,4' set @query = 'INSERT INTO @tmp_document_list (doc_id) SELECT doc_id FROM document where doc_id in (' + @IdsList + ')' EXEC sp_executeSQL @query, N'@tmp_document_list TABLE(doc_id INT) OUTPUT', @tmp_document_list OUTPUT
Mais sauf que les paramètres de type TABLE ne sont pas pris en compte pour sp_executeSQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AND (doc_id IN (SELECT doc_id FROM @tmp_document_list)
Ainsi, j'ai épuisé toutes mes idées.
Avez vous une idée ?
Merci
H.BARADI
Partager