用 varchar 替换 table 变量的动态 SQL
Dynamic SQL with varchar in replace of table variable
我对动态 SQL 和一般的 SQL 服务器还很陌生,但我想遍历 information_schema.tables
中的 table 列表。每次迭代都有一个 varchar
变量,列出要在 table 名称 (where table_name like concat('USA_RETHHDs_%', @Month)
) 中搜索的月-年。
具有匹配日期的每个 table 然后将被放入一个 varchar
变量中。问题是,我想从 information_schema.tables
列表中获取 table
变量,但我不确定如何做到这一点。因此,我试图走动态路线,将 varchar
变量嵌入到动态 SQL 查询中。但是,它期望 table
变量而不是 varchar
。
declare @Month varchar(6)
declare @Table varchar(32)
declare @sql nvarchar(max)
declare @MonthCount int
while @MonthCount > 0
begin
select @Month = DateSuffix from @DateTable where Row = @MonthCount
select @Table = table_name from information_schema.tables where table_name like concat('USA_RETHHDs_%', @Month)
select @Table = concat('dbo.', @Table)
set @sql = 'select * from @Table'
execute SP_EXECUTESQL @sql
select @MonthCount = @MonthCount - 1
end
尝试
set @sql = 'select * from ' + @Table
execute SP_EXECUTESQL @sql
我还应该提一下,您可以在 sp_executesql
调用中包含该参数
DECLARE @Month VARCHAR(6)
DECLARE @Table VARCHAR(32)
DECLARE @sql NVARCHAR(MAX)
DECLARE @MonthCount INT
DECLARE @ParmDefinition NVARCHAR(500);
WHILE @MonthCount > 0
BEGIN
SELECT @Month = DateSuffix
FROM @DateTable
WHERE Row = @MonthCount
SELECT @Table = table_name
FROM information_schema.tables
WHERE table_name LIKE CONCAT('USA_RETHHDs_%',@Month)
SELECT @Table = CONCAT('dbo.',@Table)
SET @sql = N'select * from @param '
SET @ParmDefinition = N'@param varchar(500)'
EXECUTE SP_EXECUTESQL @sql, @ParmDefinition, @param = @Table
SELECT @MonthCount = @MonthCount - 1
END
我对动态 SQL 和一般的 SQL 服务器还很陌生,但我想遍历 information_schema.tables
中的 table 列表。每次迭代都有一个 varchar
变量,列出要在 table 名称 (where table_name like concat('USA_RETHHDs_%', @Month)
) 中搜索的月-年。
具有匹配日期的每个 table 然后将被放入一个 varchar
变量中。问题是,我想从 information_schema.tables
列表中获取 table
变量,但我不确定如何做到这一点。因此,我试图走动态路线,将 varchar
变量嵌入到动态 SQL 查询中。但是,它期望 table
变量而不是 varchar
。
declare @Month varchar(6)
declare @Table varchar(32)
declare @sql nvarchar(max)
declare @MonthCount int
while @MonthCount > 0
begin
select @Month = DateSuffix from @DateTable where Row = @MonthCount
select @Table = table_name from information_schema.tables where table_name like concat('USA_RETHHDs_%', @Month)
select @Table = concat('dbo.', @Table)
set @sql = 'select * from @Table'
execute SP_EXECUTESQL @sql
select @MonthCount = @MonthCount - 1
end
尝试
set @sql = 'select * from ' + @Table
execute SP_EXECUTESQL @sql
我还应该提一下,您可以在 sp_executesql
调用中包含该参数
DECLARE @Month VARCHAR(6)
DECLARE @Table VARCHAR(32)
DECLARE @sql NVARCHAR(MAX)
DECLARE @MonthCount INT
DECLARE @ParmDefinition NVARCHAR(500);
WHILE @MonthCount > 0
BEGIN
SELECT @Month = DateSuffix
FROM @DateTable
WHERE Row = @MonthCount
SELECT @Table = table_name
FROM information_schema.tables
WHERE table_name LIKE CONCAT('USA_RETHHDs_%',@Month)
SELECT @Table = CONCAT('dbo.',@Table)
SET @sql = N'select * from @param '
SET @ParmDefinition = N'@param varchar(500)'
EXECUTE SP_EXECUTESQL @sql, @ParmDefinition, @param = @Table
SELECT @MonthCount = @MonthCount - 1
END