2015-10-24 34 views
0

用查询挣扎。做了几个改变,但不能让它工作。带变量的表和返回值的动态SQL输出

该过程本身作为查询工作,但在另一过程中调用时不起作用;因为我看不到变量值填充时我调试

任何帮助表示赞赏?

  Exec dbo.usr_GetLastDate @TableName, @LastTransDate 
      EXEC dbo.usr_GetRecCount @TableName, @RecCount 

ALTER PROCEDURE [dbo].[usr_GetLastDate] 
    -- Add the parameters for the stored procedure here 
    @TableName SYSNAME, 
    @OUTDATE date Output 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @SQLCommand NVARCHAR(MAX) = 
     N'SELECT @OUTDATE=MAX(TRANSDATE) FROM ' + QUOTENAME(@TableName); 

    EXECUTE [dbo].[sp_executesql] 
      @sqlCommand, N'@OUTDATE DATE OUTPUT', @[email protected] OUTPUT; 

END 

ALTER PROCEDURE [dbo].[usr_GetRecCount] 
    -- Add the parameters for the stored procedure here 
    @TableName SYSNAME, 
    @OUTINT int output 

AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @SQLCommand NVARCHAR(MAX) = 
     N'SELECT @OUTINT=COUNT(SYMBOL) FROM ' + QUOTENAME(@TableName); 


    EXECUTE [dbo].[sp_executesql] 
      @sqlCommand, N'@OUTINT INT OUTPUT', @[email protected] OUTPUT; 
END 
+1

你为什么要标记mysql和sql-server? –

+0

您需要回访您之前询问的问题并接受帮助您的答案。 –

回答

0

如果您使用的Visual Studio 你可以看到在变量窗口中的所有变量的值。表达式只有在有范围时才会显示值,但有时它们不会按照我们想要的方式表现。

所以我的建议是你应该使用“变量”窗口来查看所有变量及其值。

0

你需要传递的输出变量的程序

Exec dbo.usr_GetLastDate @TableName, @LastTransDate OUTPUT 
EXEC dbo.usr_GetRecCount @TableName, @RecCount OUTPUT 
+0

这使它工作M.Ali。感谢您的帮助 – HDB

+0

就像我之前说过的,您需要回访所有您之前询问过的问题,并接受帮助您的答案,以便可能提出相同问题的其他用户可以知道哪个答案为您解决了问题。成为这个社区的有用会员 –

0

是:工作的最终代码时使用的关键字输出。谢谢大家

** Main Procedure ** 
Exec dbo.usr_GetLastDate @TableName, @LastTransDate OUTPUT 
EXEC dbo.usr_GetRecCount @TableName, @RecCount OUTPUT 

ALTER PROCEDURE [dbo].[usr_GetLastDate] 
    -- Add the parameters for the stored procedure here 
    @TableName SYSNAME, 
    @OUTDATE date Output 
    --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0> 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @SQLCommand NVARCHAR(MAX) = 
     N'SELECT @OUTDATE=MAX(TRANSDATE) FROM ' + QUOTENAME(@TableName); 

    EXECUTE [dbo].[sp_executesql] 
      @sqlCommand, N'@OUTDATE DATE OUTPUT', @[email protected] OUTPUT; 

END 

ALTER PROCEDURE [dbo].[usr_GetRecCount] 
    -- Add the parameters for the stored procedure here 
    @TableName SYSNAME, 
    @OUTINT int output 
    --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0> 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @SQLCommand NVARCHAR(MAX) = 
     N'SELECT @OUTINT=COUNT(SYMBOL) FROM ' + QUOTENAME(@TableName); 


    EXECUTE [dbo].[sp_executesql] 
      @sqlCommand, N'@OUTINT INT OUTPUT', @[email protected] OUTPUT; 
END