在语句中

时间:2018-08-16 08:13:45

标签: sql sql-server sql-server-2012

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

|-------------------|-----------------|--------------|-----------------|
|     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:总结我的要求不是那么容易,任何编辑都非常感谢。

4 个答案:

答案 0 :(得分:1)

如果您想更改 @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+''''

答案 1 :(得分:0)

您不想在此处使用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;

答案 2 :(得分:0)

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

1)SELECT查询

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

2)UPDATE查询

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

答案 3 :(得分:0)

为您的SELECT查询添加静态值:

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