代码之家  ›  专栏  ›  技术社区  ›  ercan

直接引用列值而不使用T-SQL中的变量

  •  2
  • ercan  · 技术社区  · 15 年前

    在T-SQL(SQL Server 2005)中,是否有方法将整个记录分配给 记录变量 然后使用列名引用特定值?

    我是说,而不是:

    select @var1 = col1,
           @var2 = col2
    from mytable
    where ID = 1;
    

    把他们称为 @var1 @var2 ,有点像

    @record = 
    select col1, col2
    from mytable
    where ID = 1;
    

    像这样提到他们 @record.col1 @record.col2 .

    我是T-SQL的初学者,所以希望这个问题不是很简单。

    5 回复  |  直到 15 年前
        1
  •  0
  •   tvanfosson    15 年前

    埋在 Transact SQL documentation 我在变量上遇到了这个限制:

    变量只能在表达式中使用,不能代替对象名或关键字。

    因为您需要使用一个对象名来限定一个列,所以我认为这是不允许的。

        2
  •  2
  •   Quassnoi    15 年前

    您可以创建一个表变量并选择其中的整个结果集:

    DECLARE  @tt TABLE (col1 INT, col2 INT)
    
    INSERT
    INTO    @tt
    SELECT  col1, col2
    FROM    mytable
    WHERE   id = 1
    

    ,但除了在 SELECT 还有查询。

    用纯 TSQL (没有自定义数据类型)您所要求的是不可能的。

        3
  •  1
  •   John Nicholas    15 年前

    听起来你是个程序员…看看Linq,也许它能满足你的需求。

        4
  •  1
  •   MartW    15 年前

    可以使用临时表并选择…into以避免在开头指定列名:

    SELECT Field1, Field2
    INTO #TempTable
    FROM MyTable
    WHERE MyTable.MyID = 1
    

    但当然,在引用列名时,您仍然需要“从”这一诱人的部分。

    SELECT Field1, Field2
    FROM #TempTable
    

    当然要记得把桌子放在最后:

    DROP #TempTable
    

    在应用程序代码中,通常一次引用一行作为变量。

        5
  •  1
  •   gbn    15 年前

    您可以使用XML,但您必须使用它…

    DECLARE @MyRecord xml
    DECLARE @Mytable TABLE (col1 int NOT NULL, col2 varchar(30) NOT NULL)
    
    INSERT @Mytable (col1, col2) VALUES (1, 'bob')
    
    select @MyRecord =
        (SELECT *
        from @Mytable
        where col1 = 1
        FOR XML AUTO)
    
    SELECT @myRecord.value('./@col', 'int') --also @myRecord.value('@col', 'int')
    
    --gives error
    
    Msg 2390, Level 16, State 1, Line 12
    XQuery [value()]: Top-level attribute nodes are not supported
    
    推荐文章