使用 BCP 导出到 CSV 的存储过程

stored procedure to export to CSV with BCP

我需要在我们的网站上创建用户数据的按需导出。用户单击导出按钮,经典 ASP 代码执行存储过程,通过 BCP 生成文件,并提示用户下载它。

我已经创建了 sproc,并且它在从 SSMS 执行时运行完美。问题是让它从网站上运行,并授予从网站连接到 SQL 的帐户的有限权限。这是一个片段:

    -- INSERT TEMP DATA
    INSERT INTO t_users_tempExport
        SELECT * FROM #tempExport

    -- show advanced options
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE

    -- enable xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    RECONFIGURE

    -- hide advanced options
    EXEC sp_configure 'show advanced options', 0
    RECONFIGURE


-- EXPORT TO CSV
    DECLARE @sql varchar(8000)
    SELECT @sql = 'bcp "select * FROM DBNAME.dbo.tempExport WHERE scopeID='''+@randomString+'''" '
                    + 'queryout C:\temp\exportResidents_'+CONVERT(varchar(max),@userID)+'.csv -c -t, -T -S'
                    + @@servername
    EXEC master..xp_cmdshell @sql


-- RETURN FILE NAME
    SELECT 'C:\temp\export_'+CONVERT(varchar(max),@userID)+'.csv' AS fileName

问题是我无法使用授予从网站连接到 SQL 的帐户的权限启用 xp_cmdshell。我有点不知所措。

是否可以在对 BCP 的调用中包含系统管理员凭据?有没有更简单的选择或解决方法?

我最终选择了一条完全不同的路线。我从纯 ASP 代码创建了 CSV 文件,只使用存储过程来 return 数据。