2016-08-15 96 views
1

是否可以在BULK INSERT命令中使用环境变量?我真的希望这会'只是工作':批量插入环境变量

BULK INSERT [dbo].[MyTable] FROM '%HOMEDRIVE%\Data\test.txt' 
    WITH (FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'); 

我知道这是关于服务器,而不是客户端。

我确定我可以让它与XP_cmdshell一起工作,但这似乎过分。

我实际上正在寻找使用另一个环境变量,我只是选择%HOMEDRIVE%作为一个已知的例子。

+0

的Fas找到,因为我知道你需要或者XP_CMDSHELL或CLR(如果你的东西XP_CMDSHELL过多,你可能会觉得CLR过高为好) – HoneyBadger

+0

SQL使用Windows内部功能打开无法识别变量的文件。 –

回答

0

你不能,但你可以使用XP_cmdshell或CLR作为HoneyBadger的建议。

正如您将在其他地方阅读的,启用XP_cmdshell并不过分,但如果采取轻微行动则认为是安全威胁。这是因为它给了你的SQL Server更多的功能。

现在,我的假设是,你想重用不同变量的代码。假设您在服务器级别拥有适当的安全上下文,一种解决方法是将一个文件托管在您想要维护的永久位置的环境变量中,并且在Windows级别上有某种计划脚本将其更新。

要使用这些内容,您需要通过BULK INSERTOPENDATASOURCE或任何您有权创建动态SQL的内容将其导入到SQL Server中。为XP_cmdshell一些例子可以在类似的问题here