Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否从同一个表变量更新表变量?_Sql Server_Join_Sql Server 2012 - Fatal编程技术网

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