在插入语句中将表名,列名和值指定为变量时,将数据插入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.@R_496_4045@ION_SCHEMA.COLUMNS
where TABLE_NAME = @TargetTable);

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

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

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

解决方法

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

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

set @table = 'Test'

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

Exec sp_executesql @query;