Home Forums SQL Server 7,2000 T-SQL OPENROWSET linked server "(null)" error RE: OPENROWSET linked server "(null)" error

  • Hi Jeff,

    Thank you for the suggestions.

    In output file, I need to add header and footer.

    By loading output of procedure in temp table, I'll derive the header.

    Later, use the xp_cmdshell to copy file to destination.

    Sample code:

    IF object_id('tempdb..##SwitchInput') IS NOT NULL DROP TABLE ##SwitchInput;

    DECLARE

    @tempsql AS varchar(max)

    ,@execstring AS varchar(max) = 'exec ash_test;';

    SET @tempsql = 'SELECT * INTO ##SwitchInput FROM OPENROWSET(''SQLNCLI'', ''Server=vm01;Trusted_Connection=Yes;'','''+@execstring+''')';

    EXEC (@tempsql);

    DECLARE

    @hdrrow AS nvarchar(max) = 'SELECT '''

    ,@ftrrow AS varchar(50) = ' UNION ALL SELECT ''End of File'' AS rowdata'

    ,@delmtr AS nvarchar(10) = CHAR(124)

    ,@effdate AS date = '2016-8-30'

    ,@destloc AS varchar(max) = 'C:\SSData\'

    ,@filename AS varchar(250) = 'Strategy_Update_Output_';

    SELECT @hdrrow = @hdrrow + name + @delmtr FROM tempdb.sys.columns WHERE object_id = object_id('tempdb..##SwitchInput') ORDER BY column_id ASC;

    SET @hdrrow = LEFT(@hdrrow,LEN(@hdrrow)-1) + ''' AS rowdata UNION ALL ';

    DECLARE @selectstring AS varchar(max), @detailrow AS varchar(max), @trailerrow AS varchar(max), @dsql AS varchar(max), @bcpsql AS varchar(8000);

    SELECT @selectstring = +'[' + name + ']' FROM tempdb.sys.columns WHERE object_id = object_id('tempdb..##SwitchInput') AND column_id = 1;

    SELECT @selectstring = @selectstring + '+''' + @delmtr + '''+[' + name + ']' FROM tempdb.sys.columns WHERE object_id = object_id('tempdb..##SwitchInput') AND column_id > 1 ORDER BY column_id ASC;

    SET @detailrow = 'SELECT ' + @selectstring + ' AS rowdata FROM ##SwitchInput';

    SET @dsql = @hdrrow + @detailrow + @ftrrow

    SELECT @bcpsql = 'EXEC master..xp_cmdshell ''BCP "'+REPLACE(@dsql,'''','''''')+'" queryout "'+@destloc+@filename+CONVERT(varchar,@effdate,112)+'_'+FORMAT(GETDATE(),'yyyyMMddHHmmss')+'.txt" -c -T -C 1252''';

    EXEC (@bcpsql);

    This script is generic and needs work with any procedure that produces output records.

    For this procedure, I'm expecting following output:

    str1|str2

    |I am top most proc

    End of File