在sql表上触发会创建一个循环

时间:2015-03-05 23:22:43

标签: sql-server sqlcmd sql-server-2014

我有一个使用sqlcmd在某个文件夹中写入文件的查询。

 EXEC master..xp_cmdshell'sqlcmd -q "set nocount on; use [myDB] SELECT top 1 T.Field1, T.Fieldn FROM [dbo].[myTable] AS T" -oc:\Outputfolder\FileName.csv -E -m 1 -h2 -s","'

EXEC Master指令在触发器内部自行工作正常,它会生成一个循环:文件已创建,但sql卡在“执行查询”中

触发器的结构是:

 ALTER TRIGGER CreateCsvFile_Trigger ON [dbo].[TempProjectCsv] AFTER INSERT 
 AS 
 <Variables>
 BEGIN
 SET NOCOUNT ON;
 EXEC master..xp_cmdshell'sqlcmd -q "set nocount on; use [myDB] SELECT top 1 T.Field1, T.Fieldn FROM [dbo].[myTable] AS T" -oc:\Outputfolder\FileName.csv -E -m 1 -h2 -s","'
 END
 GO

任何人都可以告诉我它为什么单独工作但它会从触发器中断开? 一如既往,谢谢!

1 个答案:

答案 0 :(得分:1)

执行触发器时,它会在执行插入操作的人员的安全上下文中执行。

默认情况下,DML和DDL触发器都在调用触发器的用户的上下文中执行。触发器的调用者是执行导致触发器运行的语句的用户。 (MSDN)

因此,当您测试命令shell时,您可能是一名DBA,他有权执行各种操作,运行插件的用户(有权在表上插入)没有权限混淆文件系统来自SQL Server。您知道该文件将写在服务器上吗?