我需要选择,但我需要替换一列的值。该表有25列,我希望通过列出所有列来使其可读,以从另一个表中替换一列。以下是我所做的工作,
SELECT *
INTO #temp_grouping
FROM [ae_p_phs_e]
WHERE [template_id] = '1010'
AND [status_code] = 'OPEN'
AND [shop] = 'SP-STEAM'
-- select row from the temp table for inserting
UPDATE #temp_grouping
SET
[description] = [source_data].[description]
FROM
[ae_a_asset_e] AS [source_data]
WHERE
[source_data].[asset_tag] = [#temp_grouping].[asset_tag]
AND [source_data].[multitenant_id] = [#temp_grouping].[multitenant_id]
SELECT *
FROM #temp_grouping
--drop the temp table
DROP TABLE #temp_grouping
但是有什么其他方法可以做同样的事情?
TABLE A
-------------------------------------------------
|col1 | col2 | description | .... | nthColumn|
-------------------------------------------------
TABLE B
-------------------------------------------------
|col1 | col2 | description | .... | nthColumn|
-------------------------------------------------
示例数据返回第一个表A
1,2017-026221,001,BAD description,..... VERY LAST
1,2017-026221,002,BAD description,..... VERY LAST
1,2017-026221,003,BAD description,..... VERY LAST
1,2017-026221,004,BAD description,..... VERY LAST
1,2017-026221,005,BAD description,..... VERY LAST
示例数据返回第一个表B
1,null,XX1,GOOD description,..... VERY LAST
1,null,XX2,GOOD description,..... VERY LAST
1,null,XX3,GOOD description,..... VERY LAST
1,null,XX4,GOOD description,..... VERY LAST
1,null,XX5,GOOD description,..... VERY LAST
示例返回数据返回,基本上首先是表A,其中一个值在表B上
1,2017-026221,001,GOOD description,..... VERY LAST
1,2017-026221,002,GOOD description,..... VERY LAST
1,2017-026221,003,GOOD description,..... VERY LAST
1,2017-026221,004,GOOD description,..... VERY LAST
1,2017-026221,005,GOOD description,..... VERY LAST
Script Table As
是自动填充列的解决方案,但不适合需要。解决方案
问题不应该包括与问题相反的问题
不列出标题中所述的列。开始听起来像答案是可能没有其他方法来做我所做的所有列出所有列。如果事实并非如此,那么我将删除此部分。
答案 0 :(得分:0)
这是使用动态查询执行它的唯一方法。
declare @query nvarchar(max) = ''
declare @temp_grouping nvarchar(max) = 'col1, col2, col3'
set @query = 'SELECT '+@temp_grouping+' FROM [ae_p_phs_e] where [template_id] = ''1010'''
print @query
exec sp_executesql @query
答案 1 :(得分:0)
我担心你的评论并没有真正澄清我想要弄清楚的内容,但让我继续根据我猜你想要做的事情提出一个解决方案。实际上,基于两个猜测,我有两个解决方案:
解决方案:右键单击SSMS Object Explorer窗格中的表,然后选择Script Table As>选择到>新查询窗口。
您将获得一个新的查询窗口,其中写出了SELECT查询,并为您写出了所有列名。无需打字。然后只需使用所需的JOIN修改该查询,并在SELECT列表中找到要替换的列,并将其替换为JOINed表中的列。这会在特定的基础上生成所需的SELECT查询。
解决方案:使用动态SQL查询,就像Rainman的回答一样。您可以通过查询系统表来动态生成该列表,以获取属于您感兴趣的表的所有列,而不是键入列列表(如您在评论中提到的那样)。