【问题标题】:Can a T-SQL variable represent an entire row?T-SQL 变量可以代表一整行吗?
【发布时间】:2012-11-07 14:54:10
【问题描述】:

我正在为 SQL Server 2008 R2 编写代码。我有两个包含几十个表的数据库。

一个数据库中的每个表都包含另一个数据库中同名的表。

具有相同名称的表具有相同的格式(字段和数据类型)。两个表的内容相似但不相同。我需要根据对另一个所做的更改来更新一个,但仅在某些情况下。我想我想为此使用光标,但我找不到一个很好的例子。

到目前为止,MSDN 示例一次将一个字段读入一个变量。我确实需要能够读取/修改每个表中相同的两列,但我必须相信没有什么比为每个表的每一列声明变量更乏味的了。

我希望喜欢能够获取整行,检查几列,然后在更改两列后决定是否要将整行写入另一个表 -但是我是否必须为要获取/写入的每个字段声明变量?没有办法只获取整行并写入整行吗?

【问题讨论】:

  • SQL Server 没有102010 版本——你有2008、2008 R2 和2012——那么它是哪一个??
  • 除非您有一些非常复杂的逻辑,否则很可能有一种方法可以在连接中执行您需要的操作,以及在合并语句或基本更新中的位置。您能否详细说明您正在检查的内容?
  • @marc_s:我假设他指的是 2008 (10.0) 或 2008 R2 (10.5)。
  • @marc_s 我认为他指的是服务器版本号,您可以使用 SELECT @@VERSION 查看此内容,例如对于 Microsoft SQL Server 2008,这将返回 10.0.5512.0
  • 啊,抱歉……这是 2008 R2 与 10.50.4000。

标签: sql-server tsql sql-server-2008-r2 cursor


【解决方案1】:

您可以创建一个临时表并在其中插入行,但我认为MERGE 命令非常可配置且快速,在这里应该对您有所帮助。 http://technet.microsoft.com/en-us/library/bb510625.aspx

【讨论】:

    【解决方案2】:

    你可以

    select a.*
    

    但不能

    set a.* = b.*
    

    您不需要光标。集合操作应该会做得更好。
    但是语法很乏味。
    您可以使用 .NET 来构建语法吗?

    update a 
    set a.col1 = b.col1, a.col2 == b.col12, a.col3 = b.col3 
    from table as a
    join table as b 
      on a.ID is b.ID 
    where a.col1 <> b.col1 or a.col12 <> b.col2
    

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2013-06-21
      相关资源
      最近更新 更多