sql
  • sql-server
  • 2013-12-12 124 views 0 likes 
    0

    我想做一種插入到選擇語句。我想插入一列作爲標準,第二列通過選擇。但是這不起作用:插入到選擇SQL Server

    queryString = "INSERT INTO Words (Word, SortedId) VALUES ('" + words[i] + "', (SELECT TOP 1 SortedId FROM SortedWords WHERE SortedWord = '" + sortWord(words[i]) + "'))"; 
    

    SortedWords已經填充了數據。但此刻我得到這個錯誤

    {"There was an error parsing the query. [ Token line number = 1,Token line offset = 50,Token in error = SELECT ]"} 
    

    注:

    不知道,如果我需要的TOP 1位與否,得到錯誤兩種方式。但我obvs只想插入一行。

    +3

    目前還不清楚「queryString」被分配的位置,或者你將它傳遞給SQL Server並且解析失敗的地方,但是在queryString使用messagebox或print語句來查看它實際包含的內容之後。您還應該研究*參數化查詢*,無論您使用何種語言;您的代碼已廣泛用於SQL注入和其他問題。 –

    回答

    2

    嘗試下一個更好的做法是使用SqlParameters:

    INSERT INTO words 
          (word, 
          sortedid) 
    (SELECT TOP 1 @Word, 
           sortedid 
    FROM sortedwords 
    WHERE sortedword = @SortedWord) 
    

    而且execiting查詢之前創建一個參數(C#)

    //Assume you have a SqlCommand object(lets name it command) 
    command.Parameters.AddWithValue("@Word", words[i]); 
    command.Parameters.AddWithValue("@SortedWord", sortWord(words[i])); 
    
    +0

    執行與db.Query(queryString) - 這仍然適用 – wazzaday

    +0

    顯示您的函數'db.Query'.I認爲您將需要更改您的'db.Query'函數使用參數或只是添加一個新的SqlParameters作爲函數參數 – Fabio

    2

    更改您的查詢

    queryString = "INSERT INTO Words (Word, SortedId) SELECT '" + words[i] + "', (SELECT TOP 1 SortedId FROM SortedWords WHERE SortedWord = '" + sortWord(words[i]) + "')"; 
    

    而且,而不是連接字符串以獲得您的查詢,請使用參數來避免SQL注入。

    +1

    謝謝 - 並感謝安全提示:) – wazzaday

    +0

    這仍然拋出一個錯誤 - 執行像這樣db.Query(queryString); – wazzaday

    +0

    它適用於我......執行它時,你的'queryString'是什麼? – Szymon

    相關問題