首页 > 解决方案 > 最终用户启动 SQL 命令以从 SQL 表创建文件?

问题描述

在 2019 服务器上使用 SQL Manager 18.4 版。

有没有一种更简单的方法可以让最终用户无法访问与触发某些 SQL 命令相关的任何 SQL:

1.)创建和更新一个SQL表

2.)然后从该表(在我的情况下为csv)创建一个他们可以在文件夹共享中访问的文件?

目前我在云托管环境中使用 xp_command shell 和 bcp 命令执行此操作,因此我无法控制任何权限或访问等。例如:

declare @bcpCommandIH varchar(200)
set @bcpCommandIH = 'bcp "SELECT * from mydb.dbo.mysqltable order by 1 desc" queryout E:\DATA\SHARE\test\testfile.csv -S MYSERVERNAME -T -c -t, '
exec master..xp_cmdshell @bcpCommandIH

所以我现在如何实现这一点是允许最终用户运行一个 Crystal 报表,该报表会触发一个 SQL STORED PROCEDUE,它运行一些代码来创建和更新一个 SQL 表,然后它会创建一个最终用户可以访问的 csv 文件。创建和更新表很容易。在这个托管环境中,将表格交到最终用户手中只不过是个麻烦事。

我们总是以权限或其他文件夹共享问题而告终,这完全是浪费时间。云服务管理员告诉我“这是一个巨大的安全问题,每次您希望生成此文件时都需要使用一些命令来启动和停止 xp_command shell 以确保安全”。

好吧,这对我来说毫无意义。我不想接触任何这些,它需要自动完成,最终用户开始完成。

是否有一些更简单的方法可以自动为最终用户创建和更新 SQL 表并简单地将该表的内容导出到 CSV 文件而无需所有管理麻烦?

是否有比 xp_command shell 和 bcp 更简单的选项来实现这一点?

谢谢,

国会议员

标签: sql-serverbcpxp-cmdshell

解决方案


由于环境允许您运行 Crystal Report,您可以使用该报表通过 ODBC 导出创建表。即使表已经存在,也有第三方工具允许这种情况发生(为您提供将记录替换或追加到现有目标表的选项​​)。

但不清楚为什么不能将数据直接导入水晶报表并简单地导出为 csv。


推荐阅读