0
在T-SQL中,如果只知道一列的值爲''法拉利',那麼是否有可能使用任何查詢或技巧知道列名錶名,數據庫名?如何使用SQL Server中的列值查找列和表名稱?
在T-SQL中,如果只知道一列的值爲''法拉利',那麼是否有可能使用任何查詢或技巧知道列名錶名,數據庫名?如何使用SQL Server中的列值查找列和表名稱?
不是說這是最佳的一切,但這會發現與價值「法拉利」
-- I will use a PROC so we create a table-type
create type Meta as table (rid int identity primary key, ts varchar(100), tn varchar(100), cn varchar(100))
--Now create the proc
create proc [dbo].[foo]
(
@t Meta readonly,
@v varchar(50)
)
AS
begin
declare @max int
declare @c bit
declare @i int
declare @ts varchar(100)
declare @tn varchar(100)
declare @cn varchar(100)
declare @q nvarchar(max)
set @max = (select max(rid) from @t);
set @c = 0;
set @i = 0;
while(@i <= @max)
begin
set @i += 1;
select @ts = ts, @tn = tn, @cn = cn from @t where rid = @i;
set @q = N'select @p0 = 1 from ' + @ts + '.' + @tn + ' where ' + @cn + '[email protected];';
exec sp_executesql @q, N'@p0 bit out, @p1 varchar(50)', @[email protected],@[email protected] out
if(@c > 0)
begin
set @c = 1;
break;
end
end
if(@c = 1)
select @ts + '.' + @tn + '.' + @cn;
else
select null;
end
-- Now use it
declare @v varchar(50)
set @v = 'Ferrari'
declare @t Meta
insert into @t
select
c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS c
where
c.DATA_TYPE like '%varchar'
and c.CHARACTER_MAXIMUM_LENGTH >= len(@v)
exec dbo.foo @t = @t, @v = @v
你可以發佈一個例子列的表名,架構和列名?你的意思是說一個表包含一行,其中一列的值爲'法拉利',並且你想知道哪個列名和表包含這個值? – Oded
你的意思是你有一個價值「法拉利」,你需要找到它的存儲位置? – gotqn