sql
  • sql-server
  • 2013-12-12 123 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

    相关问题