Sql-Server-2008-R2
xp_cmdshell 只發送字元串的第一個字元
我正在嘗試使用 xp_cmdshell 啟動一個帶有列表作為輸入的 python 腳本,但由於某種原因,它只將字元串的第一個字元傳遞給命令行。我從下面的程式碼中得到的結果是“‘D’ 不被辨識為內部或外部命令、可執行程序或批處理文件。”。如果我在路徑之前添加 START 命令,它只會將“D”替換為“S”。我試圖用連接到 241 個字元來測試這個特定的行,所以我不會碰到 xp_cmdshell 的 varchar 限制。在 Windows Server 2008R2 上使用 MSSQL 2008R2。
DECLARE @inspection varchar SELECT @inspection = 'D:/Python27/ArcGISx6410.1/python.exe D:/GIS-DATA/Scripts/whydrant_update_01.py [''' + COALESCE(FACILITYID, '') + ''',''' + COALESCE(MAKER, '') + ''',''' + COALESCE(HYDRCOND, '') + ''',''' + COALESCE(BASECOL, '') + ''',''' + COALESCE(CAPCOL, '') + ''',''' + COALESCE(STEAMSIZE, '') + ''',''' + COALESCE(DISSIZE, '') + ''',''' + COALESCE(CAST(FLOW AS varchar), '') + ''',''' + COALESCE(CAST(PRESSURE AS varchar), '') + ''',''' + COALESCE(VALVELOC, '') + ''',''' + COALESCE(ACTIVE, '') + ''',''' + COALESCE(OPERABLE, '') + ''',''' + COALESCE(OPERHARD, '') + ''',''' + COALESCE(CORRODED, '') + ''',''' + COALESCE(CLEARING, '') + ''',''' + COALESCE(PAINTING, '') + ''',''' + COALESCE(MARKER, '') + ''',''' + COALESCE(NOTE, '') + ''',''' + COALESCE(CAST(created_date AS varchar), '') + ''',''' + COALESCE(USER_, '') + ''']' FROM sde.sde.a1288 WHERE FACILITYID = '2294' EXEC xp_cmdshell @inspection
問題在於您的變數聲明
varchar
。
command_string
是varchar(8000)
或_nvarchar(4000)
所以定義你的變數以及適當的長度 以避免字元串截斷
聲明@inspection varchar
應該
聲明@inspection varchar(8000)
還有幾件事(因為我不知道 Python)。
- 確保您列印或選擇
@inspection
並查看您可以成功執行生成的命令。- 使用變數表示成功或失敗,並在命令失敗時引發錯誤消息。
例如
declare @result int DECLARE @inspection varchar(8000) exec @result = master..xp_cmdshell @inspection if @result <> 0 begin print 'Python script errored out !!' RAISERROR ('Python script errored out', 16, 1) end