嵌套插入错误
Nested Insert Into Errors
我创建了这个 Insert Into SQL 查询,它从 table 课程中获取信息,其中包含课程 ID 的文本框与任何课程相匹配。我已经测试了这个查询的工作原理,因为它 returns 数据网格视图中的正确值。
查询的第二部分应该是从用户输入信息的文本框中获取学号和学名。然后把这个转入Less/Studtable.
此 table 有以下专栏
Lesson Name Lesson ID Student ID Student Name Optional?
我不需要担心可选列,因为它是一个还不需要的复选框,下面是当前不起作用的查询。它 returns 出现以下错误:
Incorrect Syntax near '/'
Incorrect Syntax near 'Test Student Name'
“ ”中的第二个错误始终包含来自学生姓名文本框的信息。
INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name])
SELECT LessonName, LessonID
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "'
AND (SELECT [Student ID], [StudentName]
'" + txtStuId.Text + "', '" + txtName.Text + "' "
您需要将所有四列插入到外部 select
:
INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name])
SELECT LessonName, LessonID, '" + txtStuId.Text + "', '" + txtName.Text + "' "
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "'
"Less/Stud" 是你的 table 名字吗?我建议把它放在引号中,因为 / 似乎混淆了数据库。
WHERE 子句似乎也不完整。子选择正在开始,但从未完成。
你也应该只把你真正想要插入数据的字段放在第一行。由于您只在 SELECT 子句中提供了 2 个值,因此您无法定义要插入的 4 个字段。
编辑:根据您的说明,原来您想将文本框中的值插入到学生 ID 和学生姓名字段中。我已经更改了我建议的查询以反映这一点。我无法对此进行测试,所以我可能会有一些不匹配的引号,但我认为它应该是这样的:
"INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName])
SELECT LessonName
, LessonID
, '" + txtStuId.Text + "'
, '" + txtName.Text + "'
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "' "
您可能需要考虑使用 String.Format() 方法将文本框值放入 SQL 字符串中。我个人认为这样字符串会更具可读性。它看起来像这样:
var yourQuery = String.Format(
"INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName]) SELECT LessonName, LessonID, '{0}', '{1}' FROM Lessons WHERE ClassID ='{2}' "
, txtStuId.Text
, txtName.Text
, txtClassId.Text
);
将 SQL 语句本身分成多行也可能是个好主意,尤其是对于更长 and/or 更复杂的语句。
您的查询有两个错误。
如果您的 table 是 Less/Stud
那么您必须用方括号调用 table 名称,例如 [Less/Stud]
您的 Insert
查询有 4 列,但您的 SELECT
查询只有 2 列。那也必须改变。
最重要的是,您的查询很容易受到 SQL 注入。尝试使用 parameterized 查询。
我创建了这个 Insert Into SQL 查询,它从 table 课程中获取信息,其中包含课程 ID 的文本框与任何课程相匹配。我已经测试了这个查询的工作原理,因为它 returns 数据网格视图中的正确值。
查询的第二部分应该是从用户输入信息的文本框中获取学号和学名。然后把这个转入Less/Studtable.
此 table 有以下专栏
Lesson Name Lesson ID Student ID Student Name Optional?
我不需要担心可选列,因为它是一个还不需要的复选框,下面是当前不起作用的查询。它 returns 出现以下错误:
Incorrect Syntax near '/'
Incorrect Syntax near 'Test Student Name'
“ ”中的第二个错误始终包含来自学生姓名文本框的信息。
INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name])
SELECT LessonName, LessonID
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "'
AND (SELECT [Student ID], [StudentName]
'" + txtStuId.Text + "', '" + txtName.Text + "' "
您需要将所有四列插入到外部 select
:
INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name])
SELECT LessonName, LessonID, '" + txtStuId.Text + "', '" + txtName.Text + "' "
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "'
"Less/Stud" 是你的 table 名字吗?我建议把它放在引号中,因为 / 似乎混淆了数据库。
WHERE 子句似乎也不完整。子选择正在开始,但从未完成。
你也应该只把你真正想要插入数据的字段放在第一行。由于您只在 SELECT 子句中提供了 2 个值,因此您无法定义要插入的 4 个字段。
编辑:根据您的说明,原来您想将文本框中的值插入到学生 ID 和学生姓名字段中。我已经更改了我建议的查询以反映这一点。我无法对此进行测试,所以我可能会有一些不匹配的引号,但我认为它应该是这样的:
"INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName])
SELECT LessonName
, LessonID
, '" + txtStuId.Text + "'
, '" + txtName.Text + "'
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "' "
您可能需要考虑使用 String.Format() 方法将文本框值放入 SQL 字符串中。我个人认为这样字符串会更具可读性。它看起来像这样:
var yourQuery = String.Format(
"INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName]) SELECT LessonName, LessonID, '{0}', '{1}' FROM Lessons WHERE ClassID ='{2}' "
, txtStuId.Text
, txtName.Text
, txtClassId.Text
);
将 SQL 语句本身分成多行也可能是个好主意,尤其是对于更长 and/or 更复杂的语句。
您的查询有两个错误。
如果您的 table 是
Less/Stud
那么您必须用方括号调用 table 名称,例如[Less/Stud]
您的
Insert
查询有 4 列,但您的SELECT
查询只有 2 列。那也必须改变。
最重要的是,您的查询很容易受到 SQL 注入。尝试使用 parameterized 查询。