2009-03-22 5 views
0

J'essaie de convertir un STP normal en un SQL partiellement dynamique J'ai besoin de la partie dynamique pour définir la valeur d'un paramètre, que j'utiliserais plus tard dans ma partie non-dynamique du STP.SQL dynamique avec les paramètres out

quand je l'imprime à l'intérieur de la dynamique @stmt il est OK, mais en dehors est vide

ce que je suis absent?

---------------------------------------------- ---------------- instruction de construction

set @stmt = 'set @stringActors = cast((select actors.actor_id 
    '[email protected]_clause+' ' 
    [email protected]_clause+' ' 
    +'for xml raw,type) as varchar(max)) print @stringActors' 

print @stmt 

------------------------- ------------------------------------- exécution

EXECUTE sp_executesql @stmt,N' 
@stringActors varchar(4000) output 
,@user_actor bigint 
,@internal_search_actor varchar(30) 
,@internal_search_route_manager  varchar(30) 
,@internal_search_terminal_id  varchar(30) 
,@ACTOR_TYPE_INSTITUTE int 
,@ACTOR_TYPE_LOCATION int' 
,@stringActors [email protected] 
,@[email protected]_actor 
,@[email protected]_search_actor 
,@[email protected]_search_route_manager 
,@[email protected]_search_terminal_id 
,@[email protected]_TYPE_INSTITUTE 
,@[email protected]_TYPE_LOCATION 

----- -------------------------------------------------- ---------- reste de STP (non dynamique) print @stringActors

Répondre

2

OUTPUT doit être spécifié à la fois n déclarant et l'attribution d'un paramètre de sortie donc je dirais que le problème est

,@stringActors [email protected] 
,@[email protected]_actor 

devrait être

,@stringActors [email protected] OUTPUT 
,@[email protected]_actor 

Aussi, consultez cette MSDN

+0

Cela m'a bit dans le derrière à quelques reprises mais une fois que vous avez acquis cette expérience, vous ne l'oubliez jamais. Aussi, un conseil de quelqu'un qui écrit beaucoup de dynamic-SQL: préfixez vos paramètres "internes" avec quelque chose comme "@pActors" ou "iActors", car cela facilite la lecture et l'écriture de la clause param-setter de sp_executesql commander. Comme ceci: 'EXECUTE sp_executesql @stmt, N ' @ pStringActors varchar (4000) sortie', @pStringActors = @stringActeurs OUTPUT' – NateJ

Questions connexes