-2

在标题中很难说出这个问题。假设您有一个名为 Users 的表,假设它有一个名为“Id”的身份/主键列。假设您想在同一个事务中获取您所知道的只是一个属于相当特定的 WHERE 子句或其他内容的 Id 实例,然后在一个非常冗长的 SELECT 语句中重复回收它,然后立即执行。这可以在 SQL Server 中完成吗?基本上我要避免的是如下内容:

Dim id As Int32 = DBA.OneTimeQuery("SELECT Id FROM users <where clause>").Rows(0)(0)
Return DBA.OneTimeQuery("SELECT <a lot of different things, involving multiple sub
    -selects that have to pull from the variable id>")
'DBA.OneTimeQuery returns a DataTable

我知道我可以通过回收第一个 where 子句来避免使用两个不同的连接或其他任何东西,但是即使是相同的连接和事务不断重新查找相同的确切信息也是非常浪费的。

我想避免让 Sql Server 多次从 Id 列中搜索该单个值,并且我还希望能够将它放在同一个 Sql 事务和连接中。如何才能做到这一点?谢谢!

4

3 回答 3

1

您可以在存储过程中执行此操作。您将 ID 存储在变量中并在需要时使用它:

DECLARE @MyID int

SET @MyID = (SELECT SomeID FROM MyUsers WHERE ... )

--now use @MyID

SELECT Foo.Bar, Foo.Rascal FROM MyTable WHERE UserID = @MyID
于 2012-10-31T18:48:51.923 回答
1

为什么不能执行连接?

SELECT <Lengthy listing> 
FROM <Some Table> INNER JOIN Users 
ON <Some Property from Some table> = Users.Id 
WHERE <Your filter clause over the Users table>
于 2012-10-31T18:52:52.087 回答
0

将其存储在 SQL 变量中?

我已经构建了冗长的脚本,我首先在其中插入一条新记录,将插入的 ID 存储到一个变量中,然后在其余代码中重用该变量。

DECLARE @insertedID int;
INSERT INTO table1 ();

SET @insertedID = @@IDENTITY;

INSERT INTO table2 (table1ID) VALUES (@insertedID);
INSERT INTO table3 (table1ID) VALUES (@insertedID);

等等

于 2012-10-31T18:49:13.540 回答