首页 > 解决方案 > 如何将表名提取到字符串变量中

问题描述

您能帮我在 SQL Server 2017 中将表名提取到字符串变量中吗?

问题:

在许多过程中,我有这样的动态查询:

declare @tbl_name nvarchar(255) = 'm4_results'
if @columns_to_ins is not null
exec ('ALTER TABLE ' + @tbl_name + ' add ' + @columns_to_ins + ';')

通过 Redgate/smart rename 重命名表后,所有“活动”表(在过程中直接提到,如 select * from m4_results)都被重命名。

但是,字符串变量中的表名不会被重命名,因为 SQL Server 不将它们视为表,而是将它们视为字符串。

大量重命名表后,由于未重命名字符串名称,因此会发生许多错误。

我想将表名提取到变量中并在过程中使用它,比如
declare @tbl_name nvarchar(255) = (query for extract table without using table name as string)

具有此类表名的字典 - 是一种方法,但对我来说不是最佳选择。

标签: sqltsqlproceduretablename

解决方案


我有一个想法,你可以将你的表名记录存储到一个临时表中,并添加一个标识列,当你对表名使用动态 sql 时,你可以使用

DECLARE @SQL VARCHAR(MAX)
DECLARE @Count INT = 1
DECLARE @Table VARCHAR(20)
DECLARE @Column VARCHAR(20)

WHILE @COUNT <= (SELECT COUNT(*) FROM #temp) 
BEGIN
    select @table = TABLENAME FROM #temp WHERE id = @Count
    SELECT @Column = COLUMNNAME FROM #temp WHERE id = @Count

    SELECT @sql = 'Alter table '+ @table+' Add +' @column

PRINT @SQL

设置@Count = @Count + 1

我总是先用print看结果是否正确,然后改用exec

如果你喜欢我的回答,请投票,谢谢。


推荐阅读