2017-07-02 22 views

回答

0
DECLARE @SQL VARCHAR(MAX) 
DECLARE @SearchString VARCHAR(100) 
SET @SQL='' 

-- ------------------------------------------ 
-- Enter the string to be searched for here : 
-- 
SET @SearchString='Foo' 
-- ------------------------------------------ 

SELECT @SQL = @SQL + 'SELECT CONVERT(VARCHAR(MAX),COUNT(*)) + '' matches in column ''+''' 
     + C.name + '''+'' on table '' + ''' + SC.name + '.' + T.name + 
     ''' [Matches for '''[email protected]+''':] FROM ' + 
     QUOTENAME(SC.name) + '.' + QUOTENAME(T.name) + ' WHERE ' + QUOTENAME(C.name) + 
     ' LIKE ''%' + @SearchString + 
     '%'' HAVING COUNT(*)>0 UNION ALL ' +CHAR(13) + CHAR(10) 
FROM  sys.columns C 
JOIN  sys.tables T 
ON  C.object_id=T.object_id 
JOIN  sys.schemas SC 
ON  SC.schema_id=T.schema_id 
JOIN  sys.types ST 
ON  C.user_type_id=ST.user_type_id 
JOIN  sys.types SYST 
ON  ST.system_type_id=SYST.user_type_id 
AND  ST.system_type_id=SYST.system_type_id 
WHERE SYST.name IN ('varchar','nvarchar','text','ntext','char','nchar') 
ORDER BY T.name, C.name 

-- Strip off the last UNION ALL 
IF LEN(@SQL)>12 
    SELECT @SQL=LEFT(@SQL,LEN(@SQL)- 12) 

EXEC(@SQL) 

--PRINT @SQL 

如何使用它: 只是relace要與「富」的@SearchString搜索的字符串。那麼你應該很好去。

P.S.如果這可以幫助你,請投票回答這個問題,讓更多的開發者看到它。

感謝這個post

+1

好像一個可以通過只刪除了''創建與DECLARE替代參數聲明的存儲過程轉換爲一個特設的腳本。請注意,此聚合字符串連接方法可能會產生意外的結果。最好使用FOR XML,或者在Azure SQL數據庫和SQL Server 2017中使用'STRING_AGG'。 –

+0

「看來可以通過刪除CREATE並用DECLARE替換參數聲明來將存儲過程轉換爲臨時腳本」您說得對,我只是想提供此解決方案,因此開發人員無需再次將其轉換。這將節省開發人員的時間。 – EntryLeveDeveloper

相關問題