Sql server SP_Execute不返回输出参数中的值

Sql server SP_Execute不返回输出参数中的值,sql-server,Sql Server,正如我们在下面的代码中所看到的,我正在将逗号分隔值的记录提取到一个游标中。我在@tableName变量中有表名 以下代码的预期结果位于@ColumnName中,因此必须使用逗号分隔的列名 DECLARE Cur CURSOR FOR SELECT [Value] AS TableName FROM [dbo].[SplitCSVs]('agency_event,agency_event_history,app_display,bulk_load

正如我们在下面的代码中所看到的,我正在将逗号分隔值的记录提取到一个游标中。我在
@tableName
变量中有表名

以下代码的预期结果位于
@ColumnName
中,因此必须使用逗号分隔的列名

DECLARE Cur CURSOR FOR
    SELECT
        [Value] AS TableName 
    FROM 
        [dbo].[SplitCSVs]('agency_event,agency_event_history,app_display,bulk_load_status,call_info,common_event,common_event_call,common_event_call_history,common_event_history,evcom,facility_recommendation,loi_data,loi_search,messa,message_dest,mr_pending_push_messages,scheduled_hist,sys_hist,un_hi,un_hi_child_change,un_hi_device_loc,un_hi_persl,unit_wkload,ushis')

DECLARE @Date AS VARCHAR(15);
DECLARE @Sql AS NVARCHAR(MAX);
SET @Date= '%20180414%';

DECLARE @ColumnName VARCHAR(2000);
DECLARE @tableName VARCHAR(200);
DECLARE @TValue VARCHAR(200); 

SET @ColumnName = NULL;

OPEN Cur

FETCH NEXT FROM cur INTO @tableName;
--Set @tableName=N'app_access'

WHILE @@FETCH_STATUS = 0  
BEGIN 
    PRINT 'Table Name : ' +  @tableName 
    --print  ' Before trim '+ Convert( Varchar,Len(@tableName))

    SET @tableName = Replace(@tableName,CHAR(0),'');
    --Horizontal Tab
    SET @tableName = Replace(@tableName,CHAR(9),'');
    --Line Feed
    SET @tableName = Replace(@tableName,CHAR(10),'');
    --Vertical Tab
    SET @tableName = Replace(@tableName,CHAR(11),'');
    --Form Feed
    SET @tableName = Replace(@tableName,CHAR(12),'');
    --Carriage Return
    SET @tableName = Replace(@tableName,CHAR(13),'');
    --Column Break
    SET @tableName = Replace(@tableName,CHAR(14),'');
    --Non-breaking space
    SET @tableName = Replace(@tableName,CHAR(160),'');

    SET @tableName = LTRIM(RTRIM(@tableName));
    --print 'Table Name : ' +  @tableName 
    --print  ' After trim '+  Convert( Varchar,Len(ltrim( rtrim(@tableName))))

    SET @Sql = null;
    SET @ColumnName = Null;
    --print char(39)+ Convert(varchar,@tableName) +  char(39)
    SET @TValue=char(39)+ Convert(varchar,@tableName) +  char(39)

    PRINT  Tvalue :' + @TValue
    --Select @ColumnName = Coalesce( @ColumnName  + ',','')  + COLUMN_NAME From [RAJDB_LIVE].INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME =  @TValue

    SET @Sql ='Select    @ColumnName   = Coalesce(  @ColumnName   +  '','','''')  + COLUMN_NAME From [RAJDB_LIVE].INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = @TbValue '

    PRINT 'Sql Query ' + @Sql

    EXECUTE sp_executesql @Sql, N'@TbValue VARCHAR(100),@ColumnName  Varchar(2000) OUTPUT', @TbValue= @TValue, @ColumnName= @ColumnName Out;
    --print 'Sql Query ' + @Sql
    --EXEC sp_executesql @Sql

    --select  @ColumnName=[Value]  FROM [dbo].[GetColumnName](@TValue)
    --Set @Sql ='Select ' + @ColumnName  + ' = Coalesce(' + @ColumnName  + '  + '','','''')  + COLUMN_NAME From [KOTADB_ARCH].INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME=' +  @TValue
    --print 'Sql Query ' + @Sql
    PRINT 'Column  Statement  : ' +  @ColumnName;

    BREAK
                --exec sp_Executesql @Sql
    FETCH NEXT FROM cur INTO @tableName
END

CLOSE cur
DEALLOCATE Cur

光标在这里的具体目标是什么?如果只是简单地拆分逗号分隔的值列表,那么还有更好的选项。请举例说明数据是如何着陆的以及您对数据的期望,正如@Larnu所说,拆分值有更好的选项,从而导致堆栈溢出。你的问题没有包含足够的细节,我们无法帮助你。请花一点时间阅读这两个链接,然后考虑编辑你的问题,如果你还在寻求帮助。和