微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将表名提取到字符串变量

如何解决如何将表名提取到字符串变量

能否帮我在 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)

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

解决方法

我有个想法,你可以把你的表名记录存入一个临时表,并添加一个标识列,当你使用动态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

SET @Count = @Count + 1

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。