2011-05-05 4 views
0

Je nouvelle transact sql je suis avecceoù est le problème

CREATE PROCEDURE Example 
    @MAESTRDESC varchar(50) --Contiene el valor a ingresar por pantalla 
AS 
/****Vars*****/ 
DECLARE 
    @Result TABLE 
    (
     ClientesDisponibles int, 
     ClientesAgendados int 
    ) 
DECLARE 
    @SQL varchar(500),--Guarda la cantidad de clientes disponibles 
    @SQLAGENDADOS varchar(500) 

SET @SQL = 'SELECT COUNT(idtable) from table'; 
SET @SQL = 'SELECT COUNT(idtable2) from table2'; 

INSERT INTO @Result EXEC @SQL, [email protected]; 

SELECT 
    R.ClientesDisponibles, 
    R.ClientesAgendados 
FROM 
    @Result R 
RETURN 

EDIT l'exception dit de

Column name or number of supplied values does not match table definition.

donner de et exception mais je n'ai pas idée de ce que je fais mal. Merci

+0

Voici une certitude: vous déclarez @SQL comme INT, mais essayez de le définir comme une chaîne. –

+0

@Joe Stefanelli désolé mon erreur affichant la question que je suis déjà édité – Jorge

+0

Vous devez utiliser SQl dynamique en dernier recours pas un premier essai. Il n'y a pas besoin de SQL dynamique dans tout cela. S'il vous plaît lire le lien suivant et ne pas envisager d'écrire un nouveau SQl dynamique jusqu'à ce que vous compreniez vraiment: http://www.sommarskog.se/dynamic_sql.html – HLGEM

Répondre

2

Vous ne pouvez pas enchaîner plusieurs EXEC appels comme ça et vous manque des parenthèses

Vous pouvez faire (et point de Neil aussi!)

INSERT INTO @Result(ClientesDisponibles) 
EXEC (@SQL) 

INSERT INTO @Result(ClientesAgendados) 
EXEC (@SQLAGENDADOS) 

Cela insérera cependant 2 lignes distinctes. Aucune idée pourquoi vous n'utilisez pas sp_executesql pour ce as per your previous question.

+0

@ Martin je ne peux pas utiliser une autre procédure de magasin pour les questions hors de la société où je travaille, quelque chose d'autre, il est possible de faire l'insertion dans la même rangée ?? merci de me demander vraiment utile – Jorge

+0

@Jorge - Est-ce que cela doit être SQL dynamique du tout? Si oui pouvez-vous combiner les 2 scripts SQL dynamiques en un seul script? 'SELECT (SELECT COUNT (idtable) de la table), (SELECT COUNT (idtable2) de table2)' –

+0

@Martin malheureusement, il doit être une requête dynamique, mais je ne vois pas comment puis-je combiner les deux requêtes – Jorge

2

Il ne fonctionnera pas à cause de cette ligne:

DECLARE @SQL int

Vous devez déclarer @SQL comme VARCHAR afin de l'utiliser comme un string. La même chose vaut pour @SQLAGENDADOS. Cependant, vous devriez également voir la réponse de @Martins concernant le chaînage de plusieurs exécutions.

Pourquoi ne pas effectuer les opérations suivantes:

DECLARE @Count1 INT; 
DECLARE @Count2 INT; 

SELECT @Count1 = COUNT(idtable) 
    FROM table; 

SELECT @Count2 = COUNT(idtable2) 
    FROM table2; 

INSERT INTO @Result 
    VALUES (@Count1, @Count2); 
+0

ce n'est pas le problème que c'était un problème posant la question mais j'ai corrigé – Jorge

0
CREATE PROCEDURE Example 
@MAESTRDESC varchar(50) --Contiene el valor a ingresar por pantalla 
    AS 
/****Vars*****/ 
DECLARE 
    @Result TABLE 
    (
     ClientesDisponibles int, 
     ClientesAgendados int 
    ) 
DECLARE 
    @SQL int,--Guarda la cantidad de clientes disponibles 
    @SQLAGENDADOS int 

SELECT @SQL = COUNT(idtable) from [table] 
SELECT @SQLAGENDADOS = COUNT(idtable2) from [table2] 

INSERT @Result VALUES (@SQL, @SQLAGENDADOS) 

SELECT 
    R.ClientesDisponibles, 
    R.ClientesAgendados 
FROM 
    @Result R 
RETURN