3
A
回答
4
找到表列使用方法:
SELECT table_name=sysobjects.name,
column_name=syscolumns.name
FROM sysobjects
JOIN syscolumns ON sysobjects.id = syscolumns.id
JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE sysobjects.xtype='U'
ORDER BY sysobjects.name,syscolumns.colid
,如果你想在表中的数据使用动态SQL你可以做下面几行内容:
Declare @Sql varChar(100)
Declare @Temp Table (Ind INT, TableName nvarchar(100))
Insert Into @Temp
Select Row_Number() Over(Order BY [Name]), [Name]
FROM
(
Select [Name]
from sys.tables
) AS D
Declare @index int
Set @index = 1
while @index < (Select Count(*) From @Temp)
begin
SET @SQL = ' Select * From ' + (Select TableName From @Temp Where Ind = @index)
exec (@SQL)
Set @index = @index + 1
End
1
我只是posted to another question在我看来是什么这个给定任务的最佳解决方案。
我的答案,甚至解决这些意见作为从:-) marc_s(是的,我们知道全文)。
希望你孤独的读者喜欢它(我真的需要更多的声望)。
2
下面是一个回答的一个副本我已经在这里提供了一个类似的问题(Search for a string in an all the tables, rows and columns of a SQLL Server DB)
倒是建议你发现自己对这个如ApexSQL Search第三方工具(也有可能是其他人在那里过,但我用这是因为它是免费的)。
如果你真的想要去的SQL方式,您可以尝试使用Sorna Kumar Muthuraj创建的存储过程 - 复制代码如下。就在执行此存储过程的模式中的所有表(易于使用动态SQL)
CREATE PROCEDURE SearchTables
@Tablenames VARCHAR(500)
,@SearchStr NVARCHAR(60)
,@GenerateSQLOnly Bit = 0
AS
/*
Parameters and usage
@Tablenames -- Provide a single table name or multiple table name with comma seperated.
If left blank , it will check for all the tables in the database
@SearchStr -- Provide the search string. Use the '%' to coin the search.
EX : X%--- will give data staring with X
%X--- will give data ending with X
%X%--- will give data containig X
@GenerateSQLOnly -- Provide 1 if you only want to generate the SQL statements without seraching the database.
By default it is 0 and it will search.
Samples :
1. To search data in a table
EXEC SearchTables @Tablenames = 'T1'
,@SearchStr = '%TEST%'
The above sample searches in table T1 with string containing TEST.
2. To search in a multiple table
EXEC SearchTables @Tablenames = 'T2'
,@SearchStr = '%TEST%'
The above sample searches in tables T1 & T2 with string containing TEST.
3. To search in a all table
EXEC SearchTables @Tablenames = '%'
,@SearchStr = '%TEST%'
The above sample searches in all table with string containing TEST.
4. Generate the SQL for the Select statements
EXEC SearchTables @Tablenames = 'T1'
,@SearchStr = '%TEST%'
,@GenerateSQLOnly = 1
*/
SET NOCOUNT ON
DECLARE @CheckTableNames Table
(
Tablename sysname
)
DECLARE @SQLTbl TABLE
(
Tablename SYSNAME
,WHEREClause VARCHAR(MAX)
,SQLStatement VARCHAR(MAX)
,Execstatus BIT
)
DECLARE @sql VARCHAR(MAX)
DECLARE @tmpTblname sysname
IF LTRIM(RTRIM(@Tablenames)) IN ('' ,'%')
BEGIN
INSERT INTO @CheckTableNames
SELECT Name
FROM sys.tables
END
ELSE
BEGIN
SELECT @sql = 'SELECT ''' + REPLACE(@Tablenames,',',''' UNION SELECT ''') + ''''
INSERT INTO @CheckTableNames
EXEC(@sql)
END
INSERT INTO @SQLTbl
(Tablename,WHEREClause)
SELECT SCh.name + '.' + ST.NAME,
(
SELECT '[' + SC.name + ']' + ' LIKE ''' + @SearchStr + ''' OR ' + CHAR(10)
FROM SYS.columns SC
JOIN SYS.types STy
ON STy.system_type_id = SC.system_type_id
AND STy.user_type_id =SC.user_type_id
WHERE STY.name in ('varchar','char','nvarchar','nchar')
AND SC.object_id = ST.object_id
ORDER BY SC.name
FOR XML PATH('')
)
FROM SYS.tables ST
JOIN @CheckTableNames chktbls
ON chktbls.Tablename = ST.name
JOIN SYS.schemas SCh
ON ST.schema_id = SCh.schema_id
WHERE ST.name <> 'SearchTMP'
GROUP BY ST.object_id, SCh.name + '.' + ST.NAME ;
UPDATE @SQLTbl
SET SQLStatement = 'SELECT * INTO SearchTMP FROM ' + Tablename + ' WHERE ' + substring(WHEREClause,1,len(WHEREClause)-5)
DELETE FROM @SQLTbl
WHERE WHEREClause IS NULL
WHILE EXISTS (SELECT 1 FROM @SQLTbl WHERE ISNULL(Execstatus ,0) = 0)
BEGIN
SELECT TOP 1 @tmpTblname = Tablename , @sql = SQLStatement
FROM @SQLTbl
WHERE ISNULL(Execstatus ,0) = 0
IF @GenerateSQLOnly = 0
BEGIN
IF OBJECT_ID('SearchTMP','U') IS NOT NULL
DROP TABLE SearchTMP
EXEC (@SQL)
IF EXISTS(SELECT 1 FROM SearchTMP)
BEGIN
SELECT [email protected],* FROM SearchTMP
END
END
ELSE
BEGIN
PRINT REPLICATE('-',100)
PRINT @tmpTblname
PRINT REPLICATE('-',100)
PRINT replace(@sql,'INTO SearchTMP','')
END
UPDATE @SQLTbl
SET Execstatus = 1
WHERE Tablename = @tmpTblname
END
SET NOCOUNT OFF
go
相关问题
- 1. SQL Server 2008中:找到包含列与指定名称
- 2. 查找哪些特定列不存在的表sql server
- 3. SQL Server:提取包含特定文本的行之后的行
- 4. 如何找到哪个表包含特定数据
- 5. SQL-不要选择那些包含特定文本的行
- 6. 找到MS Word表格包含一个特定文本
- 7. 哪个dmp文件包含哪些表
- 8. 找到特定的文本,多次出现,并且在包含特定文本
- 9. 查找包含特定文本和某些家长
- 10. 找不到包含特定文本从SharePoint的.aspx页面
- 11. 在哪里可以找到SQL Server 2008上的MyDataBase.BAK文件?
- 12. Linux bash:找到包含特定文本的文件夹
- 13. 如何查找哪些索引和约束包含特定列?
- 14. SQL Server:找出哪些用户对哪些表有写权限?
- 15. 在SQL Server 2008中找不到sysmail_mailitems表
- 16. SQL Server 2005中 - 找哪家存储的特效运行到特定的表
- 17. 如何查找包含默认实例的SQL Server 2008实例
- 18. 如何找到哪些类或方法包含特定的注释?
- 19. Python/lxml/Xpath:如何找到包含特定文本的行?
- 20. 找到并单击包含特定文本的元素
- 21. 找到包含特定文本的路径
- 22. 找到一个包含特定文本的HTML标签
- 23. 如何找到包含特定文本的列? (VBA)
- 24. 转换SQL Server 2008中,以SQL Server 2005中包含的数据
- 25. 找出文本输入是否包含jQuery的特定文本
- 26. 哪些是2005年添加到SQL Server 2008中的新功能?
- 27. 哪个表包含此数据+ SQL
- 28. 链接表 - SQL Server 2008到SQL Server 2005
- 29. SQL Server 2008:查找包含单词的表内的字符串世界
- 30. SQL Server 2008选择某些列有特定的数据
一个字:全文检索... – 2010-11-16 18:01:55
你想找到在*列名指定的字符串*或*数据*存储在所有表中的所有列中?如果是后者,你真的没有办法来缩小它,如果没有,做这些表都有着类似的结构? – 2010-11-16 18:03:36
存储在列中的数据。表格有diff结构 – 2010-11-16 18:04:32