在语句中使用 SELECT 填充多列



我想问一下,如果我在INSERT语句中有SELECT语句,如何同时将数据插入多个列。我想填写下表:

|-------------------|-----------------|--------------|-----------------|
|     TableName     |     ColName     |     Value    |  SQL_Statement  |
|-------------------|-----------------|--------------|-----------------|

我有以下查询,它只提交一个值列:

SET @SQL_String = 'INSERT INTO #ResultTable(Value) SELECT ' + @ColName + ' FROM ' + @TableSchema + '.' + @TableName + ' WHERE ' + @ColName + ' = ''' + cast(@GuidArgument AS NVARCHAR(50)) + '''';

我需要填充所有列,但我不知道如何编写该查询。这是我需要的查询的一些"伪代码":

INSERT INTO TableSchema
(
TableName,
ColName, 
Value, 
SQL_Statement
) 
VALUES 
(
@TableName, 
@ColName, 
[THAT LONG SELECT FROM QUERY ABOVE], 
@SQL_Statement
);

请考虑我使用的是动态查询。

谢谢大家!

PS:总结我的请求并不容易,非常感谢任何编辑。

如果您想更改@SQL_String表达式,我们可以通过以下方式实现。 我希望这是你所期待的。

SET @SQL_String=
N'INSERT INTO #ResultTable
(
TableName,
ColName, 
Value, 
SQL_Statement
) 
SELECT
'+@TableName+', 
'+@ColName+', 
(SELECT ' + @ColName + ' FROM ' + @TableSchema + '.' + @TableName + ' WHERE ' + @ColName + ' = ''' + cast(@GuidArgument AS NVARCHAR(50)) + '''),
'''+@SQL_Statement+''''

您不想在此处使用VALUES关键字。如果要从表中选择一个值以插入它,则必须使用类似insert into .. select ..

Insert INTO TableName 
(col1, 
col2, 
col3, 
col4)
Select 'AStaticValue', 
'AnotherStaticValue', 
col1, 
col4
FROM    AnotherTable 
WHERE   SomeCondition = true

因此,在您的情况下,它应该看起来像这样:

INSERT INTO TableSchema
(
TableName,
ColName, 
Value, 
SQL_Statement
) 
Select
@TableName, 
@ColName, 
ColumnNameFromYourQuery, 
@SQL_Statement
From your-table where condition;

将静态值添加到SELECT查询中:

INSERT INTO TableSchema
SELECT @TableName
,@ColName
,col1
,col2
,colX
FROM WhateverTable
WHERE some_column = 'some_value'

我的建议是运行两个查询:

1( 选择查询

SET @SQL_String = 'INSERT INTO #ResultTable(Value) SELECT ' + @ColName + ' FROM ' + @TableSchema + '.' + @TableName + ' WHERE ' + @ColName + ' = ''' + cast(@GuidArgument AS NVARCHAR(50)) + '''';

2( 更新查询

UPDATE TableSchema
SET  TableName=  @TableName, ColName= @ColName, SQL_Statement= @SQL_Statement
WHERE SQL_Statement=@SQL_Statement;

最新更新