2016-08-15 68 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