使用 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 数据。
我需要在我们的网站上创建用户数据的按需导出。用户单击导出按钮,经典 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 数据。