MSSQL SP에서 외부 DLL 사용하는 방법 (CLR 확장저장프로시저) 1.사전작업(CLR환경을사용하도록설정합니다.) EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'clr enabled', 1 GO RECONFIGURE GO 2. Visual Studio에서 dll 생성 - 클래스라이브러리 3. 클래스를 생성한다. 4. namespace는 삭제한다. 5. class를 public으로 만든다. 6. static으로 Function이 될 메서드를 생성한다. 8. 생성된 DLL을 SQL server의 특정 위치에 복사 9. 어셈블리를 만든다. -- DROP ASSEMBLY Encrypt create assembly Encrypt from 'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\ClassLibrary1.dll' 10. Function을 만든다. --DROP FUNCTION dbo.fnEncrypt --DROP FUNCTION dbo.fnDecrypt --EXTERNAL NAME <method_specifier> assembly_name.class_name.method_name CREATE FUNCTION fnEncrypt(@value nvarchar(max)) RETURNS nvarchar(max) AS EXTERNAL NAME Encrypt.csStringEncrypter.Encrypt GO CREATE FUNCTION fnDecrypt(@value nvarchar(max)) RETURNS nvarchar(max) AS EXTERNAL NAME Encrypt.csStringEncrypter.Decrypt GO 11. Test select dbo.fnEncrypt('9901011122334...
[MSSQL 2008 계정(권한) 관리 개념 정리] 기본적으로 데이터베이스 전체 범위의 계정 '로그인' (보안>로그인) 각 데이터베이스의 안에 '사용자' (데이터베이스 선택>보안>사용자) 이렇게 이중 구조로 되어있다. 로그인 생성 시 '데이터베이스 사용자' 매핑을 해주면, 그 매핑된 데이터베이스에 사용자가 자동으로 생성된다. 단, '로그인'을 삭제해도 '사용자'가 삭제되지는 않는다. '로그인'은 '서버 역할' (public, sysadmin 등) 의 멤버로 들어갈 수 있고, '사용자'는 '데이터베이스 역할' (ab_datareader, db_owner 등) 의 멤버로 들어갈 수 있다. 모든 로그인은 public 서버 역할의 멤버로 들어가며 제외될 수 없다. 로그인 생성 시 데이터베이스 사용자 매핑과, 데이터베이스 역할에 멤버로 추가할 수 있다. 사용자는 스키마를 소유하고, 스키마가 개체들을 소유한다. 기본적으로 dbo 스키마를 소유하도록 설정된다. db_owner 라는 이름의 스키마와 다름. dbo 라는 이름의 사용자와 헷갈리지 않도록 주의. 테이블 이름 앞에 붙어있는 dbo 가 바로 dbo 스키마를 뜻한다.
MSSQL 2008 특정 뷰 권한주기 데이터베이스 사용자 속성 > 보안개체 > 테이블, 뷰 등 대상 선택 > 삽입/수정/삭제 등 권한 설정 > 컬럼 단위로 설정 가능 메시지 229, 수준 14, 상태 5, 줄 2 개체 '*****', 데이터베이스 '****', 스키마 'dbo'에 대한 SELECT 권한이 거부되었습니다. [해결] 뷰 선택 권한을 주었어도, 그 뷰에서 참조하는 개체에 대한 선택 권한이 없으면 위와 같은 메시지가 나온다. dbo 스키마에 선택 권한을 주면 가능하지만, 더 세밀하게 테이블 단위 혹은 컬럼 단위로 권한 부여가 가능하다.
제목: Microsoft SQL Server Management Studio ------------------------------ 사용자 '****'에 대한 삭제이(가) 실패했습니다. (Microsoft.SqlServer.Smo) 도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=삭제+User&LinkId=20476 ------------------------------ 추가 정보: Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo) ------------------------------ 데이터베이스 보안 주체는 데이터베이스의 스키마을(를) 소유하며 삭제할 수 없습니다. (Microsoft SQL Server, 오류: 15138) 도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=15138&LinkId=20476 [해결] 사용자 삭제 시 위와 같은 메시지가 나오는 경우 해결방법! 스키마를 소유한 사용자는 삭제할 수 없다. 스키마 속성에서 스키마 소유자를 바꾸고 삭제하면 된다. 기본적으로 생성된 스키마는 동일한 이름의 데이터베이스 역할이 소유자이다. 예) db_datareader, db_owner...
제목: Microsoft SQL Server Management Studio ------------------------------ 연결된 서버에 대한 연결 테스트에 실패했습니다. ------------------------------ 추가 정보: Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo) ------------------------------ 연결된 서버 "****"에 대한 OLE DB 공급자 "OraOLEDB.Oracle"의 데이터 원본 개체를 초기화할 수 없습니다. 연결된 서버 "****"의 OLE DB 공급자 "OraOLEDB.Oracle"이(가) 메시지 "ORA-12154: TNS:could not resolve the connect identifier specified"을(를) 반환했습니다. (Microsoft SQL Server, 오류: 7303) 도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=7303&LinkId=20476 ------------------------------ 단추: 확인 ------------------------------ 해결 >>> tnsnames.ora 파일에 문제가 있다. MSSQL이 설치된 서버에 오라클 클라이언트 설치 경로 D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN 여기 폴더에 tnsnames.ora 파일을 아래처럼 수정해준다. 연결이름= (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) ...
-- Count rows for all tables 모든 테이블의 행 수 카운트 SP_MSForEachTable 를 사용하면 간단하게 할 수 있다. CREATE TABLE #counts ( table_name varchar(255), row_count int ) EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?' SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC DROP TABLE #counts --Ref from stack overflow.
배치스케줄이 아래의 에러를 뱉으며 동작하지 않는다. 다음 사용자로 실행되었습니다: NT AUTHORITY\SYSTEM. 다음 SET 옵션의 설정이 잘못되어 DELETE이(가) 실패했습니다. 'QUOTED_IDENTIFIER'. SET 옵션을 인덱싱된 뷰 및/또는 계산 열에 대한 인덱스 및/또는 필터링된 인덱스 및/또는 쿼리 알림 및/또는 XML 데이터 형식 메서드 및/또는 공간 인덱스 작업과(와) 함께 사용할 수 있는지 확인하십시오. [SQLSTATE 42000] (오류 1934). 단계가 실패했습니다. SET QUOTED_IDENTIFIER ON 설정을 넣으면 된다! Identifier(식별자)를 "큰따옴표" 안에 넣으면 쓸 수 있다는 설정인데, OFF되어있다한들 이게 왜 문제가 된건지??
sql delete from nested select join해서 delete할 대상을 구하기 위해 nested query를 사용할 때 주의해야한다. declare @t1 table (n int) insert @t1 values(1) insert @t1 values(2) insert @t1 values(3) declare @t2 table (n int) insert @t2 values(1) insert @t2 values(2) insert @t2 values(3) --이렇게 하면 의도대로 3만 지워질까? delete @t1 from ( select * from @t1 ) x where x.n=3 --이렇게 하면? delete @t2 from ( select * from @t2 where n=3 ) x select * from @t1 select * from @t2 --result:Nothing...! --아무것도없다!
sql non overlapping random number 중복되지 않는 랜덤 값으로 채우기 ex) Fill random number from 0 to 15 declare @t int = 0 declare @tt table (n int) while( (select count(n) from @tt) < 15) begin set @t = floor(rand()*15) --Generate 0~15 if @t not in (select n from @tt) begin insert into @tt values(@t) end end select n from @tt
Connection Failed [MySQL][ODBC 5.3(a) Driver]Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled): 예전 버전 드라이버로 연결하니까 잘 된다. mysql-connector-odbc-3.51.30-winx64
둘 다 전체백업 이후 변화된 부분만을 백업하는 것은 동일하다. [전체][증분1][증분2][증분3] 증분2는 증분1 이후 변화된 부분만 증분3은 증분2 이후 변화된 부분만을 기록한다. 그래서 복원 시 중간의 증분백업분들이 모두 필요하며, 손상 시 복원 불가. [전체][차등1][차등2][차등3] 전체백업 이후 백업시점까지 변화된 모든 내용을 기록한다. 전체백업과 복원하려는 시점의 차등백업분 하나로 복원한다.