Sql server 是否从同一个表变量更新表变量?
我有一个表变量(Sql server 是否从同一个表变量更新表变量?,sql-server,join,sql-server-2012,Sql Server,Join,Sql Server 2012,我有一个表变量(@t\u var)如下所示: [RSIN] [Grp] S-000001 1 S-000002 2 S-000003 1 C-000002 null C-000003 null [RSIN] [Grp] S-000001 1 S-000002 2 S-000003 1 C-000002 2 C-000003 1 我需要为“C”-类型设置[Grp],基于[Grp]为“S”-类型设置相应的右部件。最后,我应该是这
@t\u var
)如下所示:
[RSIN] [Grp]
S-000001 1
S-000002 2
S-000003 1
C-000002 null
C-000003 null
[RSIN] [Grp]
S-000001 1
S-000002 2
S-000003 1
C-000002 2
C-000003 1
我需要为“C”-类型设置[Grp],基于[Grp]为“S”-类型设置相应的右部件。最后,我应该是这样的:
[RSIN] [Grp]
S-000001 1
S-000002 2
S-000003 1
C-000002 null
C-000003 null
[RSIN] [Grp]
S-000001 1
S-000002 2
S-000003 1
C-000002 2
C-000003 1
我试图做的最明显的方式是:
UPDATE @t_var
SET [Grp] = B.[Grp]
FROM @t_var A
LEFT JOIN @t_var B
ON 'C'+RIGHT(A.[RSIN], 7) = B.[RSIN]
WHERE LEFT(A.[RSIN],1) = 'S'
但是管理工作室告诉我一些关于它的事情,不能区分使用哪个@t\u var
。当我们谈论物理表时,这个构造可以很好地工作,但当涉及到表变量时,它就不起作用了
除了创建重复的表变量(如
@t_var2
)并在join中使用它之外,还有什么优雅的解决方法吗 表名和列名不能是动态的。他们需要保持静止
您需要在这里使用动态SQL
阅读更多关于
这有帮助吗
UPDATE @t_var
SET [Grp] = CASE WHEN LEFT([RSIN], 1) = 'C'
AND RIGHT([RSIN], 1) = '2'
THEN 2
WHEN LEFT([RSIN], 1) = 'C'
AND ( RIGHT([RSIN], 1) = '1'
OR
RIGHT([RSIN], 1) = '3' )
THEN 1
END