首页 > 解决方案 > 在插入语句中将表名、列名和值作为变量给出时,在 SQL Server 表中插入数据?

问题描述

我正在尝试创建一个通用脚本来将数据从一个数据库复制到另一个数据库,并且我已经编写了这个脚本。

USE TargetDatabase;

DECLARE @SourceDatabase NVARCHAR(100);
DECLARE @TargetDatabase NVARCHAR(100);

DECLARE @SourceTable NVARCHAR(100);
DECLARE @TargetTable NVARCHAR(100);

DECLARE @var NVARCHAR(MAX);

SET @SourceDatabase = 'SourceDB'
SET @TargetDatabase = 'TargetDB'

SET @SourceTable = 'SourceTable'
SET @TargetTable = 'TargetTable'

set @var = (SELECT STRING_AGG (QUOTENAME(COLUMN_NAME), ',') from 
@TargetDatabase.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @TargetTable);

正如您在下面看到的,在INSERT语句中,我将表名、列名和值作为变量提供。这是我遇到问题的地方,所以基本上我不知道如何评估这些变量@var, @SourceTable, @TargetTable

INSERT INTO @TargetTable (SELECT @Var)
SELECT * FROM @SourceTable

我被困在这里,我不知道如何解决这个问题。谁能解释我如何解决这个问题?

标签: sql-servertsqlvariablesdynamic-sql

解决方案


还有许多其他方法可以运行动态查询,但这是您可以根据需要运行查询的一种方法。

declare @table nvarchar(50)
declare @query nvarchar(500)

set @table = 'Test'

set @query='insert into [' +@table+ '] Select * from [' +@table+ ']';

Exec sp_executesql @query;


推荐阅读