라벨이 SQL인 게시물 표시

Using Table as Queue

http://rusanu.com/2010/03/26/using-tables-as-queues/ 좋은 글이네요.

SQL 서버 객체 변경이력 자동 저장.

원문 :  https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/ store procedure 등의 소스도 시스템테이블에 저장된다는 점을 이용해서, 객체가 바뀌면 새 소스를 통채로 차곡차곡 특정 테이블에 저장하는 원리입니다. 지원대상 이벤트는 아래와 같습니다. CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE,CREATE_VIEW,ALTER_VIEW, DROP_VIEW,CREATE_FUNCTION,ALTER_FUNCTION,DROP_FUNCTION,CREATE_DEFAULT, DROP_DEFAULT, CREATE_TYPE, DROP_TYPE 모든 DDL 이벤트는  https://docs.microsoft.com/en-us/sql/relational-databases/triggers/ddl-events  를 보세요. -- Database 별로 실행해야 함. use wacore_main; go create TABLE DDLEvents ( EventDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , EventType NVARCHAR ( 64 ), EventDDL NVARCHAR ( MAX ), EventXML XML , DatabaseName NVARCHAR ( 255 ), SchemaName NVARCHAR ( 255 ), ObjectName NVARCHAR ( 255 ), HostName VARCHAR ( 64 ), IPAddress VARCHAR ( 32 ), ProgramName NVARCHAR ( 255 ), LoginName NVARCHAR ( 255 ) ); g...

Index 사용 현황 조회하기.

SELECT i.name, s.* FROM sys.dm_db_index_usage_stats s inner join sys.indexes i on i.object_id = s.object_id and i.index_id = s.index_id where s.object_id = Object_id('WACORe_Main.dbo.TB_Main_appointment'); https://blogs.msdn.microsoft.com/sqlserverstorageengine/2007/04/20/how-can-you-tell-if-an-index-is-being-used/

Oracle Sql Developer. 쓸만한 무료 ERD 도구.

이미지
좋으면서도 무료인 ERD 도구 하나 없는 것이 매우 슬프나, Oracle Sql Developer 를 MS-SQL 에 연결해서 쓰면 나름 괜찮다. 무료 ERD 도구 중엔 젤 좋은 프로그램. http://kentgraziano.com/2013/01/14/tech-tip-connect-to-sql-server-using-oracle-sql-developer/ http://www.oracle-base.com/blog/2013/10/01/sql-developer-4-ea2-connecting-to-sql-server/ 설치하고 나서 JDBC  드라이버를 설치한다.  다운받은 드라이버를 적당한 곳에 풀고,  환경설정 > 데이터베이스 > 타사 JDBC 드라이버 메뉴에서 jtds-1.3.1.jar 파일을 선택. 프로그램 재실행하면 연결 추가에 SQL  Server 탭이 추가된다. SSO 연결 오류에 관한 건 구글링.

SQL. Pivoting에 대한 가장 깔끔한 설명

http://www.codeproject.com/Articles/692269/Querying-SQL-Server-2012-Part-II

.NET에서 Excel 파일 읽기. 특히 구버전(97-2003)의 포맷일 경우.

NPOI  라이브러리 이용. Thanks to 안홍조 & 정세일 . CSV 포맷으로 올려서 읽는다. ODBC 드라이버를 설치해서 읽는다.  ODBC 연결 문자열 2003 이전 구포맷일 경우 상용컴포넌트 사용 ExpertXLS Excel Library for .NET ComponentOne 2007 이후 버전(Open XML Format) 일 경우 EPPlus , ClosedXml ,  NPOI  등등 매우 많은 오픈소스 프로젝트가 있다. Sql Server의  SQL Server Integration Services (혹은 DTS) 를 이용한다. 이 방법을 이용하려면, SSIS를 설치해서, DTS 패키지를 만든 후에, 이 DTS 패키지를 Job스케쥴러에 등록해서, Job을 실행시키면 된다. 단 SSIS가 설치된 컴퓨터에서 파일을 읽을 수 있어야 하고, 읽은 파일을 바로 DB의 테이블로 Export 시키기 위해서는 SQL Server의 계정이 sysadmin 서버역할이 부여되야 한다. 서버에 Excel을 직접 설치해서 COM을 이용해 읽는 것은 안 된다. Excel 프로그램이 무인실행을 위해 만들어진 프로그램이 아니기 때문에, 읽은 파일을 못 닫거나, 메모리 누수와 같은 문제가 발생할 수 있다. 구버전 파일의 경우 현실적으로 StackOverflow 에서처럼 ODBC 드라이버가 대세이지만,  ODBC를 이용해 읽는 방법은 32/64bit OS에 따라 다른 드라이버 를 설치해야 하고, ODBC 드라이버에서 각 컬럼의 데이타 타입을 유추할 때, 첫 몇 줄을 이용해서 판단하는데 조금 문제가 있다. 특히 셀 값을 텍스트로 입력하지 않으면(셀값의 앞에 apostrophe '를 붙히지 않으면) 포맷은 숫자지만 실제로는 텍스트 인데, 읽으면 숫자로 인식해버린다. 예를 들어 00033223 가 33223으로 읽히거나,  매우 긴 숫자면 Single/Double 타입...

SQL Server 2008에서 좋아진 Values 구문

Interesting enhancements to the VALUES Clause in SQL Server 2008 스칼라 값들을 Values에 여러개 묶어서 테이블 흉내를 내는 기능이 귀엽다.

Choosing a Primary Key: Natural or Surrogate?

Surrogate Key 라는 것을 처음 들어봤다. 난 무식하다. This article overviews strategies for assigning primary keys to a table within a relational database.  In particular, it focuses on the issue of when to use natural keys and when to use surrogate keys.  Some people will tell you that you should always use natural keys and others will tell you that you should always use surrogate keys.  These people invariably prove to be wrong, typically they're doing little more than sharing the prejudices of their "data religion" with you.  The reality is that natural and surrogate keys each have their advantages and disadvantages, and that no strategy is perfect for all situations.  In other words, you need to know what you're doing if you want to get it right.  This article discusses: Common key terminolo gy    Strategies for assigning keys Surrogate key implementation strategies Tips for effective keys What to do when you make the "wrong" choice 1. Common...

Database에 마지막으로 접속한 시각 알아보기

SELECT DatabaseName, MAX(LastAccessDate) LastAccessDate FROM (SELECT DB_NAME(database_id) DatabaseName , last_user_seek , last_user_scan , last_user_lookup , last_user_update FROM sys.dm_db_index_usage_stats) AS PivotTable UNPIVOT (LastAccessDate FOR last_user_access IN (last_user_seek , last_user_scan , last_user_lookup , last_user_update) ) AS UnpivotTable GROUP BY DatabaseName HAVING DatabaseName NOT IN ('master', 'tempdb', 'model', 'msdb') ORDER BY 2 단, 서버를 리스타트 시키면 위의 정보는 초기화된다. 원문 시스템의 Database 목록 보기 SELECT name, dbid, filename, mode, crdate, * FROM master..sysdatabases s

신기방기한 SQL Server의 기능들

PIVOT, UNPIVOT CTE {CROSS | OUTER} APPLY 연산자 TABLESAMPLE 문 RANKING 함수들 APPLY 연산자는 잘 몰랐는데 매우 유용할듯. PIVOT은... 알면 편할듯. 2008 R2보면 많이 발전했지만, 아직도 Intrinsic 함수들은 Oracle에 비하면 조족지혈

이쯤에서 보는 SQL Server 2008(R2)의 T-SQL 새 기능들.

사실 SQL 새 기능에 대해서 관심 끊긴지 오래됐네. 간단히 정리하면 MERGE문 - 두 테이블을 비교해서 합친다. OUTPUT 문 - DML문의 결과를 리턴한다. GROUPING SETS (A, B, C ..), GROUPING_ID() 함수 Declare 문에서 선언과 동시에 값 할당 복합할당 연산자 ROW 생성자. VALUES({expression | DEFAULT | NULL| }[,...n])[,... n]  Date, Time 타입 추가 SP 파라미터로 Table-Valued 파라미터를 사용할 수 있다. Hierarchyid 데이타 타입 추가 Change Tracking. 테이블의 바뀐 시점과 버전을 관리해줌. http://technet.microsoft.com/en-us/library/cc645577(v=sql.100).aspx http://msdn.microsoft.com/en-us/library/cc645577(v=sql.105).aspx 그리고 사소한 팁하나. Update할 때 set 문에서 변수도 업데이트할 수 있다. [ WITH [...n] ] UPDATE [ TOP ( expression ) [ PERCENT ] ] { <object> | rowset_function_limited [ WITH ( [ ...n ] ) ] } SET { column_name = { expression | DEFAULT | NULL } | { udt_column_name.{ { property_name = expression | field_name = expression } | method_name ( argument [ ,...n ] ) } ...

특정 컬럼의 의존성(Dependencies)를 찾는 쿼리 혹은 툴

SELECT DISTINCT 'TABLES' AS OBJECT, t.TABLE_TYPE AS OBJECT_TYPE, t.TABLE_NAME AS [OBJECT_NAME] FROM INFORMATION_SCHEMA.Columns c INNER JOIN INFORMATION_SCHEMA.Tables t ON t.TABLE_CATALOG = c.TABLE_CATALOG AND t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME WHERE COLUMN_NAME IN ('컬럼명') UNION SELECT DISTINCT 'ROUTINES' AS OBJECT, ROUTINE_TYPE AS OBJECT_TYPE, ROUTINE_NAME AS [OBJECT_NAME] FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_DEFINITION LIKE '%컬럼명%' 원문 더 찾다 보니 Red-Gate SQL Search 라는 툴도 있구나. 원문