使用函数的T-SQL Update表列

时间:2012-09-25 12:33:53

标签: tsql function loops updates

我有下表:

RecordID 
Name
Col1
Col2
....
ColN

RecordIDBIGINT PRIMARY KEY CLUSTERED IDENTITY(1,1)RecordIDName已初始化。其他列是NULL。

我有一个函数,它通过Name返回有关其他列的信息。

要初始化我的表格,我使用以下算法:

  1. 创建LOOP
  2. 获取一行,选择其Name
  3. 使用所选名称执行该功能,并存储其结果 在临时变量
  4. 在表格中插入临时变量
  5. 转到下一条记录
  6. 有没有办法在没有循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:5)

交叉申请基本上是为此建立的

SELECT D.deptid, D.deptname, D.deptmgrid
    ,ST.empid, ST.empname, ST.mgrid
FROM Departments AS D
    CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST;

Using APPLY

UPDATE some_table
SET some_row = another_row,
    some_row2 = another_row/2
FROM some_table st
  CROSS APPLY
    (SELECT TOP 1 another_row FROM another_table at WHERE at.shared_id=st.shared_id)
WHERE ...

using cross apply in an update statement

答案 1 :(得分:3)

如果表中已有记录,则可以简单地说出以下内容。

UPDATE MyTable
SET 
    col1 = dbo.col1Method(Name),
    col2 = dbo.col2Method(Name),
    ...

在插入新记录时,假设RecordID是自动生成的,您可以说

INSERT INTO MyTable(Name, Col1, Col2, ...)
VALUES(@Name, dbo.col1Method(@Name), dbo.col2Method(@name), ...)

其中@Name包含Name列的值。