web-dev-qa-db-fra.com

Valeur renvoyée par exec (@sql)

Je veux obtenir la valeur de Exec(@sql) et l'assigner à @Rowcount(int)

Voici ma requête:

'SET @RowCount = (select count(*) 
                    FROM dbo.Comm_Services 
                   WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'
46
sreekanth

D'une part, vous pouvez utiliser sp_executesql:

exec sp_executesql N'select @rowcount=count(*) from anytable', 
                    N'@rowcount int output', @rowcount output;

D'autre part, vous pourriez utiliser une table temporaire:

declare @result table (rowcount int);
insert into @result (rowcount)
exec (N'select count(*) from anytable');
declare @rowcount int = (select top (1) rowcount from @result);
87
Manfred Sorg

Jouait avec cela aujourd'hui ... Je pense que vous pouvez aussi utiliser @@ ROWCOUNT, comme ceci:

DECLARE @SQL VARCHAR(50)
DECLARE @Rowcount INT
SET @SQL = 'SELECT 1 UNION SELECT 2'
EXEC(@SQL)
SET @Rowcount = @@ROWCOUNT
SELECT @Rowcount

Puis remplacez le "SELECT 1 UNION SELECT 2" par votre sélection actuelle sans le nombre. Je suggèrerais simplement de mettre 1 dans votre sélection, comme ceci:

SELECT 1
FROM dbo.Comm_Services
WHERE....
....

(par opposition à mettre SELECT *)

J'espère que ça t'as aidé.

0
TylerM

declare @nReturn int = 0 EXEC @nReturn = Procédures stockées

0
bugstar

c'est ma procédure

CREATE PROC sp_count
    @CompanyId sysname,
    @codition sysname
    AS
    SET NOCOUNT ON
    CREATE TABLE #ctr
    ( NumRows int )

    DECLARE @intCount int
         , @vcSQL varchar(255)

    SELECT    @vcSQL = ' INSERT #ctr FROM dbo.Comm_Services 
                       WHERE CompanyId = '+@CompanyId+' and '+@condition+')'
    EXEC      (@vcSQL)

    IF @@ERROR = 0
    BEGIN
         SELECT    @intCount = NumRows
         FROM #ctr

         DROP TABLE #ctr
         RETURN @intCount
    END
    ELSE
    BEGIN
         DROP TABLE #ctr
         RETURN -1
    END
    GO
0
kst