2010-10-25 18 views
2

基本上我正在尋找選擇一個pdf的內容到表中。在SQL Server中的OPENROWSET幫助(模擬問題)

我使用此查詢:

SELECT * 
FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs 

查詢將無法運行,因爲我的用戶名沒有在該服務器上的權限(也不應該),但我需要能夠作爲認證不同的用戶執行此查詢。

它可能不會在生產中的問題,因爲我相信運行該命令的帳戶將具有適當的權限,但事實上,我希望能夠「模仿」該用戶(我顯然有其憑據)並從我的帳戶運行查詢。任何想法如何做到這一點?

謝謝...

回答

2

可以在OPENROWSET指定的連接字符串的詳細信息。請參閱下面的語法的{ 'datasource';'user_id';'password' | 'provider_string' }部分。

OPENROWSET 
({ 'provider_name', { 'datasource';'user_id';'password' 
    | 'provider_string' } 
    , { [ catalog. ] [ schema. ] object 
     | 'query' 
    } 
    | BULK 'data_file', 
     { FORMATFILE ='format_file_path' [ <bulk_options> ] 
     | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB } 
})<bulk_options> ::= 
    [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] 
    [ , ERRORFILE ='file_name' ] 
    [ , FIRSTROW = first_row ] 
    [ , LASTROW = last_row ] 
    [ , MAXERRORS = maximum_errors ] 
    [ , ROWS_PER_BATCH =rows_per_batch ] 
+0

@Joe - 如果他在存儲過程中執行此操作,憑據將以純文本形式存儲嗎? – JNK 2010-10-25 15:54:47

+0

@JNK:是的,但是根據OP的評論「它不會是生產中的問題」,我認爲這在開發中是合理的。環境。 – 2010-10-25 16:01:36

+0

不幸的是user_id不能是Windows登錄名(這是我需要的) – nosirrahcd 2010-10-25 16:01:46

0

如果你會做了很多,你可以做到這一點作爲一個OSQL command line query(通過批處理文件或類似):

OSQL -U [username] -p [password] -S [server] -D [database] -q "EXIT(SELECT * FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs)"

您需要確定如果你想存儲在數據庫中或存儲在文件中的憑證,您可以在生產完成後將其刪除。