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