안녕하세요.
예전에 한거 같은데 기억이 안나서요.
한 데이터베이스안에 존재하는 전 필드에서 제가 입력한 텍스트값이 존재하는 필드를 찾는방법이 있나요?
syscolumns에서 한거 같은데. 방법이 기억이 안나네요..
아시는분 도움부탁드립니다.
Comment 2
-
SELECT A.NAME, B.NAMEFROM SYSOBJECTS A INNER JOIN SYSCOLUMNS B ON A.ID = B.IDWHERE A.XTYPE = 'U' AND B.NAME = '???'
-
진윤호
2014.02.11 15:36
위에껄 응용하셔서 검색하시면 될꺼 같은데 엄청 오래 걸리실 듯
서비스 중이 아닌 디비에서 돌려 보시면 되실 꺼 같아요
CREATE TABLE #TBL(
TableName NVarChar(100),
ColumnName NVarChar(100),
)
DECLARE @TableName NVarChar(100)
DECLARE @ColumnName NVarChar(100)
DECLARE @SQL NVarChar(Max)
DECLARE @TEXT NVarChar(100)
DECLARE @RET NVarchar(40)
DECLARE @COUNT INT
SET @TEXT = N'텍스트'
SET @RET = N'@COUNT INT OUTPUT'
SET @SQL = N''
DECLARE CUR_TEST CURSOR FOR
SELECT TABLE_NAME,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('VARCHAR','NVARCHAR','CHAR','NCHAR',N'TEXT')
OPEN CUR_TEST
FETCH NEXT FROM CUR_TEST INTO @TableName,@ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'SELECT @COUNT=COUNT(*) FROM '+@TableName+ ' WHERE '+@ColumnName+' LIKE ''%'+@TEXT+'%'''
EXEC SP_EXECUTESQL @SQL,@RET,@COUNT = @COUNT OUTPUT
IF @COUNT > 0
BEGIN
INSERT #TBL (TableName,ColumnName) VALUES (@TableName,@ColumnName)
END FETCH NEXT FROM CUR_TEST INTO @TableName,@ColumnName
END
CLOSE CUR_TEST
DEALLOCATE CUR_TEST
SELECT * FROM #TBL
대충 이런식으로 하면 해당 테이블과 컬럼은 알 수 있습니다.