【发布时间】:2013-10-15 14:48:02
【问题描述】:
我似乎无法弄清楚如何在 VB 中将 SQL 查询的输出作为变量。我需要类似下面的内容,以便可以在另一个 SQL 查询中使用该变量。 SQL 不允许在运行查询时使用变量作为列标题,所以我想我可以使用 VB 将一个 SQL 任务的实际输出作为动态变量插入到更新查询的循环中。让我(希望)解释一下。
我有以下疑问:
DECLARE @id int = (SELECT max(id) FROM [views]), @ViewType nvarchar(3);
WHILE @id IS NOT NULL
BEGIN
SELECT @ViewType = (SELECT [View] FROM [views] WHERE id = @id);
UPDATE a
SET a.[@ViewType] = '1'
FROM [summary] a
INNER JOIN [TeamImage] b
ON a.[Part_Number] = b.[PartNum]
WHERE b.[View] = @ViewType;
SELECT @id = max(id) FROM [views] WHERE id < @id;
END;
SET a.[@ViewType] = '1' 显然在 SQL 中不起作用。但是如果我可以让 (SELECT [View] FROM [views] WHERE id = @id) 等于一个变量,那么我可以在 VB 中编写 SQL 查询并执行它,该变量将成为字符串的一部分并因此执行正确。
我是 VB 的新手,但到目前为止,这是我所掌握的:
Dim cn As SqlConnection = New SqlConnection("Data Source=Server1;" & _
"Initial Catalog=DB1;" & _
"Integrated Security=SSPI")
cn.Open()
Dim cmd As New sqlCommand("SELECT max(id) FROM orientation_view_experiment;", cn)
vID = cmd.ExecuteNonQuery()
Do While vID > 0
Dim cmd2 As New sqlCommand("SELECT [View] FROM [views] WHERE id ='" + vID + "'"
vViewType = cmd2.ExecuteNonQuery()
Dim cmd3 As New sqlCommand("UPDATE a
SET a.'" + vViewType + "' = '1' & _
FROM [summary] a & _
INNER JOIN [TeamImage] b & _
ON a.[Part_Number] = b.[PartNum] & _
WHERE b.[View] = '" + vViewType + "';"
cmd3.ExecuteNonQuery()
vID = vID - 1
Loop
cn.Close()
我希望其中一些有意义,但在这一点上我有点迷失了。我觉得我知道我需要 SQL 来做什么,但不能完全弄清楚如何让计算机/程序服从我的意愿,只做我需要它做的事情。
感谢您提供的任何帮助/指导。
【问题讨论】:
-
该代码将容易受到 sql 注入攻击。它实际上是在乞求被黑。