将传递的参数作为结果集中的列返回

时间:2015-09-24 21:35:41

标签: sql sql-server tsql stored-procedures

我有以下存储过程代码,并希望将传递的参数@tabname添加为结果集中的列。

CREATE PROCEDURE CountStar 
    @Tabname char(10)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL varchar(250)

    SELECT @SQL = 'SELECT ETL_LAST_UPD_DTTM, COUNT(*) FROM ls.' + QuoteName(@Tabname) +
    'GROUP BY ETL_LAST_UPD_DTTM'
    EXEC (@SQL)

    SELECT @SQL = 'SELECT ETL_LAST_UPD_DTTM, COUNT(*) FROM ci.' + QuoteName(@Tabname) +
    'GROUP BY ETL_LAST_UPD_DTTM'
    EXEC (@SQL)
    --COMMIT
END
GO

目前,这将返回上次更新的时间戳和正在传递给已识别的2个模式的存储过程的表的记录计数。我想将@tabname添加到结果集中作为第一列,然后是最后更新的时间戳和记录计数。这将返回2个结果集,每个结果集对于每个返回的结果集应该看起来像这样。

Table_name      Timestamp                   rec_cnt
--------------------------------------------------
CUSTOMERS     2015-09-24 13:10:01.1770000     378

我尝试了一些但却无法正确理解语法。

感谢您的任何指示。 专利

1 个答案:

答案 0 :(得分:3)

CREATE PROCEDURE CountStar 
    @Tabname SYSNAME    --<-- use appropriate data type for sql server objects
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL nvarchar(max);

    SELECT @SQL = N'SELECT  @Tabname AS Table_name,ETL_LAST_UPD_DTTM, COUNT(*) 
                   FROM ls.' + QuoteName(@Tabname) +
                   N' GROUP BY ETL_LAST_UPD_DTTM'
    EXEC sp_executesql @SQL
                      ,N'@Tabname SYSNAME'
                      ,@Tabname 

    SELECT @SQL = N'SELECT @Tabname AS Table_name,ETL_LAST_UPD_DTTM, COUNT(*) 
                   FROM ci.' + QuoteName(@Tabname) +
                  N' GROUP BY ETL_LAST_UPD_DTTM'
    EXEC sp_executesql @SQL
                      ,N'@Tabname SYSNAME'
                      ,@Tabname 
END
GO
相关问题