gpt4 book ai didi

sql - 表名作为变量

转载 作者:行者123 更新时间:2023-12-01 16:36:21 26 4
gpt4 key购买 nike

我正在尝试执行此查询:

declare @tablename varchar(50)
set @tablename = 'test'
select * from @tablename

这会产生以下错误:

Msg 1087, Level 16, State 1, Line 5

Must declare the table variable "@tablename".

动态填充表名称的正确方法是什么?

最佳答案

对于静态查询,例如您问题中的查询,表名和列名必须是静态的。

对于动态查询,您应该动态生成完整的 SQL,并使用 sp_executesql 来执行它。

以下是用于比较不同数据库的相同表之间的数据的脚本示例:

静态查询:

SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]

由于我想轻松更改架构的名称,因此我创建了这个动态查询:

declare @schema sysname;
declare @table sysname;
declare @query nvarchar(max);

set @schema = 'dbo'
set @table = 'ACTY'

set @query = '
SELECT * FROM [DB_ONE].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + '
EXCEPT
SELECT * FROM [DB_TWO].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table);

EXEC sp_executesql @query

由于动态查询有很多需要考虑的细节,并且很难维护,所以我建议您阅读:The curse and blessings of dynamic SQL

关于sql - 表名作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com