특정 SP 검색
Declare @DS_TEXT varchar(1000)
Set @SP_NAME = 'order'
Set @DS_TEXT = 'order'
Select A.name, b.text, *
From sysobjects a, syscomments b
Where a.id=b.id
And a.name like '%'+@SP_NAME+'%'
And b.text like '%'+@DS_TEXT+'%'
특정 SP 검색
결과값에 자리수를 표시하는 방법(Money)
----------------
결과값
100,000,000.00
----------------
결과값
100,000,000
With Tree_Org(self_cd, parent_cd, name, org_level, sort_col)
AS
(
Select self_cd, parent_cd, name, 1 As Org_Level, Convert(varchar(255), self_cd)
From tbl_relation
Where self_cd = '01'
Union All
Select a.self_cd, a.parent_cd, a.name, b.org_level + 1 As org_level, Convert(varchar(255), sort_col + ' ' + a.self_cd)
From tbl_relation A
Inner Join Tree_Org B On A.parent_cd = B.self_cd
)
Select self_cd, parent_cd, name, org_level, sort_col
From Tree_Org
order by sort_col
오라클에서는 Connect by를 써서 나타내지만 Mssql에서는 2005부터 CTE로 기능을 제공한다.
붉게 표시된 부분은 특정 컬럼을 연결하여 마지막 조회시 연결된 컬럼으로 sort하게되며 계층형태로 조회된다.
출처 : http://blog.naver.com/PostView.nhn?blogId=kwonhjae&logNo=30039692894
[출처] MS-SQL 2005 계층구조|작성자 Gabriel
Why I’m getting this error?
The PIVOT command is not available for SQL Server 2000. When we upgrade the SQL Server 2000 instance to SQL Server 2005, the database COMPATIBILITY_LEVEL remain in 80 until we change it manually.
Solution:
If you are running SQL 2005
EXEC sp_dbcmptlevel 'myDatabaseName', 90
If you are running SQL 2008
EXEC sp_dbcmptlevel 'myDatabaseName', 100
기본적으로 SQL Server에서는 OPENROWSET 및 OPENDATASOURCE를 사용하는 임시 분산 쿼리를 허용하지 않습니다. 이 옵션을 1로 설정하면 SQL Server에서 임시 액세스가 허용됩니다. 이 옵션을 설정하지 않거나 0로 설정하면 SQL Server에서 임시 액세스가 허용되지 않습니다.
임시 분산 쿼리에서는 OPENROWSET 및 OPENDATASOURCE 함수를 사용하여 OLE DB를 사용하는 원격 데이터 원본에 연결합니다. OPENROWSET과 OPENDATASOURCE는 자주 사용되지 않는 OLE DB 데이터 원본을 참조하기 위해서만 사용해야 합니다. 여러 번 액세스될 모든 데이터 원본에 대해서는 연결된 서버를 정의해야 합니다.
![]() |
---|
임시 이름 사용을 설정하면 SQL Server에 대한 모든 인증된 로그인에서 공급자에 액세스할 수 있습니다. SQL Server 관리자는 모든 로컬 로그인에서 액세스해도 안전한 공급자에 대해 이 기능을 설정해야 합니다. 자세한 내용은 외부 데이터 액세스의 DisallowAdhocAccess 옵션을 참조하십시오. |
다음 예에서는 임시 분산 쿼리를 실행한 다음 OPENROWSET 함수를 사용하여 Seattle1이라는 서버를 쿼리합니다.
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO SELECT a.* FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;', 'SELECT GroupName, Name, DepartmentID FROM AdventureWorks2008R2.HumanResources.Department ORDER BY GroupName, Name') AS a; GOSelect *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml;HDR=YES;Database=d:\파일명.xls',
'SELECT * FROM [sheet$]')Select *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=YES;Database=d:\파일명.xls',
'select * from [sheet$]');
Excel 스프레드시트에 대해 연결된 서버를 만들려면
Jet 4.0용 Microsoft OLE DB 공급자를 사용하여 Microsoft Excel 스프레드시트에 액세스할 수 있습니다.
Excel 스프레드시트를 액세스하는 연결된 서버를 만들려면 다음 예와 같은 형식을 사용하십시오.
Excel 스프레드시트의 데이터를 액세스하려면 셀 범위에 이름을 연결하십시오. 범위 이름을 테이블 이름으로 사용하여 명명된 범위를 액세스할 수 있습니다. 다음 쿼리를 사용하면 이전 예제에서 만든 연결된 서버를 사용하여 SalesData라는 명명된 범위를 액세스할 수 있습니다.
명명된 셀 범위에 행을 삽입하면 명명된 셀 범위의 일부인 마지막 행 다음에 이 행이 추가됩니다. 따라서 열 머리글 뒤에
rA 행을 삽입하려면 열 머리글 셀을 이름과 연결한 다음 이 이름을 테이블 이름으로 사용하십시오. 행이 삽입되면
셀 범위가 자동으로 증가합니다.
-- 테이블 목록
EXEC SP_TABLES
-- 테이블이 컬럼 목록
EXEC SP_COLUMNS @TABLE_NAME
-- 스키마 테이블에서 직접 컬럼정보 가져오기~
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLE_NAME
-- PK, FK, INDEX등 정보 가져오기
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS K
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS C ON K.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE K.TABLE_NAME = @TABLE_NAME
-- 컬럼에 추가해둔 Description 가져오기
SELECT *
FROM SYS.EXTENDED_PROPERTIES XP
WHERE XP.CLASS = 1
AND XP.MINOR_ID > 0
AND XP.MAJOR_ID = OBJECT_ID(@TABLE_NAME)
AND XP.NAME IN (N'MS_DESCRIPTION')
ORDER BY XP.MINOR_ID
위의 정보를 이용하여 테이블 정보를 출력해 보자~
프로젝트 산출물 작업시 유용하게 쓰일것이다.
포맷이 다음과 같다면...
컬럼 명 | 컬럼 ID | Type & Length | NOT NULL |
PK | FK | IDX | 비고 | |
DECLARE @TABLE_NAME AS VARCHAR(30)
SET @TABLE_NAME = 'TEM_BOARD'
SELECT
[컬럼명] = D.COLUMN_DESC
, [컬럼ID] = C.COLUMN_NAME
, [Type & Length] = COLUMN_TYPE
, [NOT NULL] = CASE WHEN C.IS_NULLABLE = 'NO' THEN 'Y' ELSE '' END
, PK = ISNULL(K.PK, '')
, FK = ISNULL(K.FK, '')
, INX = ISNULL(K.INX, '')
FROM
(
SELECT
TABLE_NAME
, COLUMN_NAME
, IS_NULLABLE
, COLUMN_TYPE = CASE WHEN DATA_TYPE IN ('VARCHAR', 'NVARCHAR', 'char', 'nchar') THEN
DATA_TYPE + '(' + CONVERT(VARCHAR(10), ISNULL(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION)) + ')'
WHEN DATA_TYPE IN ('DECIMAL') THEN
DATA_TYPE + '(' + CONVERT(VARCHAR(10), NUMERIC_PRECISION) + ', ' + CONVERT(VARCHAR(10), NUMERIC_SCALE) + ')'
ELSE DATA_TYPE END
, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLE_NAME
) AS C
LEFT JOIN -- 키정보
(
SELECT COLUMN_NAME
, PK = MAX(PK)
, FK = MAX(FK)
, INX = MAX(INX)
FROM
(
SELECT
COLUMN_NAME
, PK = CASE WHEN K.CONSTRAINT_TYPE = 'PRIMARY KEY' THEN 'Y' END
, FK = CASE WHEN K.CONSTRAINT_TYPE = 'FOREIGN KEY' THEN 'Y' END
, INX = CASE WHEN K.CONSTRAINT_TYPE = 'INDEX' THEN 'Y' END
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS K
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS C ON K.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE K.TABLE_NAME = @TABLE_NAME
) AS K
GROUP BY COLUMN_NAME
) AS K ON C.COLUMN_NAME = K.COLUMN_NAME
LEFT JOIN -- Description 정보
(
SELECT
COLUMN_NM = COL_NAME(XP.MAJOR_ID, XP.MINOR_ID)
, COLUMN_DESC = CAST(XP.[VALUE] AS NVARCHAR(4000))
FROM SYS.EXTENDED_PROPERTIES XP
WHERE XP.CLASS = 1
AND XP.MINOR_ID > 0
AND XP.MAJOR_ID = OBJECT_ID(@TABLE_NAME)
AND XP.NAME IN (N'MS_DESCRIPTION')
) AS D ON C.COLUMN_NAME = D.COLUMN_NM
ORDER BY C.ORDINAL_POSITION
Here is my code for getting the row counts for each table in a database using a CURSOR:
use pubs
go
set nocount on
declare @cnt int
declare @table varchar(128)
declare @cmd varchar(500)
create table #rowcount (tablename varchar(128), rowcnt int)
declare tables cursor for
select table_name from information_schema.tables
where table_type = 'base table'
open tables fetch next from tables into @table
while @@fetch_status = 0
begin
set @cmd = 'select ''' + @table + ''', count(*) from ' + @table
insert into #rowcount exec (@cmd)
fetch next from tables into @table
end CLOSE tables
DEALLOCATE tables
select top 5 * from #rowcount
order by tablename
drop table #rowcount
Here is the output of my CURSOR example when the above code in run on my machine:
tablename rowcnt ------------- ----------- authors 23 discounts 3 employee 43 jobs 8 pub_info 8
Now here is my code that produces similar results using the undocumented SP_MSforeachtable":
Here is the output from the above code when run on my machine: