我想从表格本身中选择表格名称
例如
Select * ,(TableName) from Table1
union
Select *,(TableName) from Table2
我不想以静态的方式做这件事
Select * ,'TableName' as tbl from Table1
union
Select *,'TableName' as tbl from Table2
提前致谢
答案 0 :(得分:1)
你做不到。
您可以使用SELECT OBJECT_NAME(this)
之类的元数据功能。
FROM Table1
位是静态的,所以问题是什么呢?
答案 1 :(得分:1)
解决方案可以是动态的,但它比你的第一个代码块复杂得多。
声明一个足够大的varchar变量来保存你的select脚本(例如@script)。 声明一个游标,用于迭代sysobjects表中的表。它类似于:
declare cc cursor for select name from sysobjects
where type='U' and name like '%yourTableNamePatternHere%'
order by name
使用fetch next和@@ fetch_status在while循环中记录记录,将大型union-query组装成@script,最后使用sp_executesql让服务器执行@script。
就是这样。 以下是一个列表中的脚本:
declare @n varchar(100), @script nvarchar(2000)
set @script = ''
declare cc cursor for select name from sysobjects where type='u' and name like '%yourTableNamePatternHere%'
open cc
fetch next from cc into @n
while @@fetch_status = 0
begin
if @script <> '' set @script = @script + ' union '
set @script = @script + 'select <column1>, <column2>, ''' + @n + ''' as tableName from ' + @n
fetch next from cc into @n
end
close cc
deallocate cc
-- print @script
exec sp_executesql @script