我有下表:
RecordID
Name
Col1
Col2
....
ColN
RecordID
为BIGINT PRIMARY KEY CLUSTERED IDENTITY(1,1)
,RecordID
和Name
已初始化。其他列是NULL。
我有一个函数,它通过Name
返回有关其他列的信息。
要初始化我的表格,我使用以下算法:
Name
值有没有办法在没有循环的情况下执行此操作?
答案 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;
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 ...
答案 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列的值。