2014-10-08 82 views
0

如果我運行SQL Server 2012的上下面,它的工作原理演員IP地址要插入的字符串到SQL Server 2012

BEGIN 
    IF NOT EXISTS (SELECT * 
       FROM dbo.Computers 
       WHERE Computer_ID = 'A1E8AC100AFB160500BAD934ACD97536') 
    BEGIN 
    INSERT INTO dbo.Computers(Date_of_Record, Computer_Name, IP_Address, Operating_System, Agent_Version, BIOS_Version, Computer_ID) 
    VALUES (CAST(GETDATE() AS DATE), 'LPB0FLYX', '10.10.10.10', 'Windows 7 Enterprise Edition', '12.1.2015.2015', 'LENOVO - 6040000 Phoenix BIOS SC-T v2.2', 'A1E8AC100AFB160500BAD934ACD97536') 
    END 
END 

但是,如果我在PowerShell中運行(其中$k[1]的值爲10.10以下。 10.10),這是行不通的

$SQL_UPDATE = "BEGIN 
         IF NOT EXISTS (SELECT * 
            FROM dbo.Computers 
            WHERE Computer_ID = $k[5]) 
         BEGIN 
          INSERT INTO dbo.Computers(Date_of_Record, Computer_Name, IP_Address, Operating_System, Agent_Version, BIOS_Version, Computer_ID) 
          VALUES (CAST(GETDATE() AS DATE), $k[0], $k[1], $k[2], $k[3], $k[4], $k[5]) 
         END 
        END 

這是我創建

enter image description here

表的結構

如何投放$k[1]爲字符串,所以實際上我傳遞'10 .10.10.10'

編輯

這裏是回聲$ SQL_UPDATE

BEGIN 
         IF NOT EXISTS (SELECT * 
            FROM dbo.Computers 
            WHERE Computer_ID = 9D2838890AFB16050170A8AEE4F15517) 
         BEGIN 
          INSERT INTO dbo.Computers(Date_of_Record, Computer_Name, IP_Address, Operating_System, Agent_Version, BIOS_Version, Computer_ID) 
          VALUES (CAST(GETDATE() AS DATE), LMG0033SZ, 10.10.10.10, Windows 7 Enterprise Edition, 12.1.4013.4013, LENOVO - 1180 LENOVO BIOS Rev: FNKT24A 0.0, 9D2838890AFB16050170A8AEE4F15517) 
         END 
        END 

錯誤的:

Exception calling "ExecuteNonQuery" with "0" argument(s): "Incorrect syntax near 'D2838890AFB16050170A8AEE4F15517'. 
Incorrect syntax near '.194'." 
At D:\Script\unknowns.ps1:259 char:5 
+  $cmd_update.executenonquery() 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : SqlException 
+0

我懷疑你在生成的查詢中缺少單引號。你能迴應$ SQL_UPDATE的結果內容並添加到問題嗎? – 2014-10-08 15:49:17

+0

@JoachimIsaksson我更新了問題。如何添加單引號? – Glowie 2014-10-08 17:17:27

+1

我懷疑它很簡單,就像'VALUES(CAST(GETDATE()AS DATE)','$ k [0]','$ k [1]','$ k [2]','$ k [3]' ,'$ k [4]','$ k [5]')' – 2014-10-08 17:19:18

回答

1

問題是你在生成的SQL中缺少你的字符串引號。

如果您可以控制要包含的值(即,使它們不包含單引號),則可以簡單地向該字符串添加引號;

... 
VALUES (CAST(GETDATE() AS DATE), '$k[0]', '$k[1]', '$k[2]', '$k[3]', '$k[4]', '$k[5]') 
...