【问题标题】:In SQL Server, is there a way to get a single value from an identity column and repeatedly use it in the same scope?在 SQL Server 中,有没有办法从标识列中获取单个值并在同一范围内重复使用它?
【发布时间】:2012-10-21 08:42:17
【问题描述】:

标题中的问题很难用词来表达。假设您有一个名为 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 事务和连接中。如何才能做到这一点?谢谢!

【问题讨论】:

  • 您是在 VB 中执行此操作还是在存储过程中执行此操作?
  • 我很好奇。 . .为什么要关心 SELECT 是否在单个事务中执行?
  • 我们不要说“让我们说”这么多次。
  • @Blam 假设我们按照您的要求做;我们怎么说呢? ;)
  • @AndrewBarber 我绑定了一个编辑。

标签: sql sql-server tsql variables select


【解决方案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

【讨论】:

  • 您可能希望执行单个事务,因为这对他来说似乎很重要。
  • @JordanKaye - 可以,随意编辑以满足需要,这是一个协作网站。
【解决方案2】:

为什么不能执行连接?

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>

【讨论】:

    【解决方案3】:

    将其存储在 SQL 变量中?

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

    DECLARE @insertedID int;
    INSERT INTO table1 ();
    
    SET @insertedID = @@IDENTITY;
    
    INSERT INTO table2 (table1ID) VALUES (@insertedID);
    INSERT INTO table3 (table1ID) VALUES (@insertedID);
    

    等等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 2022-01-08
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多