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