CREATE PROCEDURE
ExportExcelMulti
(
@OutputFolderPath varchar(255) = NULL,
@TemplateFilePath varchar(255) = NULL,
@FileBaseName varchar(255) = 'ExcelFile_'
)
AS
IF LEN(ISNULL(@OutputFolderPath, '')) = 0 BEGIN RAISERROR('@OutputFolderPath is required', 16, 1) RETURN END
IF LEN(ISNULL(@TemplateFilePath, '')) = 0 BEGIN RAISERROR('@TemplateFilePath is required', 16, 1) RETURN END
DECLARE
@ACD int
DECLARE c_MyCurs CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT ACD FROM dbo.Test
OPEN c_MyCurs
FETCH NEXT FROM c_MyCurs INTO @ACD
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @OLEDBInitString varchar(1000),
@FilePath varchar(1000),
@CopyCmd varchar(1000)
SET @FilePath = @OutputFolderPath + @FileBaseName + CAST(@ACD as varchar) + '.xls'
SET @CopyCmd = 'COPY /Y "' + @TemplateFilePath + '" "' + @FilePath + '"'
EXEC master.dbo.xp_cmdshell @CopyCmd, no_output
SET @OLEDBInitString = 'Data Source="' + @FilePath + '";Extended properties=Excel 5.0;'
DECLARE @Insert varchar(1000)
SET @Insert = 'INSERT INTO OPENDATASOURCE( ''Microsoft.Jet.OLEDB.4.0'', ''' + @OLEDBInitString + ''')...[Sheet1$]
SELECT * FROM Test WHERE ACD = ' + CAST(@ACD as varchar)
EXEC (@Insert)
FETCH NEXT FROM c_MyCurs INTO @ACD
END
CLOSE c_MyCurs
DEALLOCATE c_MyCurs
SET NOCOUNT OFF
DECLARE
@ACD int,
@FolderPath varchar(255),
@TemplateFilePath varchar(255)
SET @TemplateFilePath = 'D:\ACCN EXCEL FILE TEST\Template.xls'
SET @FolderPath = 'D:\ACCN EXCEL FILE TEST\'
DECLARE c_MyCurs CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT ACD
FROM dbo.Test
WHERE (STATUS = 0)
OPEN c_MyCurs
FETCH NEXT FROM c_MyCurs INTO @ACD
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @OLEDBInitString varchar(1000),
@FilePath varchar(1000),
@CopyCmd varchar(1000)
SET @FilePath = @FolderPath + 'ExcelFile_' + CAST(@ACD as varchar) + '.xls'
SET @CopyCmd = 'COPY /Y "' + @TemplateFilePath + '" "' + @FilePath + '"'
EXEC master.dbo.xp_cmdshell @CopyCmd, no_output
SET @OLEDBInitString = 'Data Source="' + @FilePath + '";Extended properties=Excel 5.0;'
DECLARE @Insert varchar(1000)
SET @Insert = 'INSERT INTO OPENDATASOURCE( ''Microsoft.Jet.OLEDB.4.0'', ''' + @OLEDBInitString + ''')...[Sheet1$]
SELECT ID, Name FROM Test WHERE ACD = ' + CAST(@ACD as varchar)
EXEC (@Insert)
INSERT INTO [Test](PATH)
VALUES (@FolderPath)
FETCH NEXT FROM c_MyCurs INTO @ACD
END
CLOSE c_MyCurs
DEALLOCATE c_MyCurs
What if I wanted to add a field to the table: STATUS, and I only wanted to export records where the status was = 0.
Would I put that after line 10:
SELECT DISTINCT ACD FROM dbo.Test
WHERE STATUS = 0