@@IDENTITY 마지막으로 삽입된 ID 값 가져오기

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/identity-transact-sql?view=sql-server-2017

 

@@IDENTITY(Transact-SQL) - SQL Server

@@IDENTITY (Transact-SQL)@@IDENTITY (Transact-SQL) 이 문서의 내용 --> 적용 대상: SQL Server Azure SQL Database Azure SQL Data Warehouse 병렬 데이터 웨어하우스 APPLIES TO: SQL Server Azure SQL Database Azure SQL Data Warehouse Parallel Data Warehouse 마지막으로 삽입된 ID 값을 반환하는 시스템 함

docs.microsoft.com

같은 키값으로 동시에 두개 넣기

--자동증감 키
INSERT INTO TB_TEST1(VAL) VALUES('INSERT'); -- KEY IDX

SET @idx = @@IDENTITY


SET IDENTITY_INSERT TB_TEST2 ON;
 
INSERT INTO TB_TEST2(IDX, VAL)
	 VALUES (@idx, 'INSERT');
 
SET IDENTITY_INSERT TB_TEST2 OFF;

프로시저에서 두개의 값을 저장하기 위해 

같은 키값을 넣기 위해 저장할수 있다.

	INSERT INTO TB_A (ProjectName) VALUES (@pProjectName)
	SET @oId = @@IDENTITY
    
	--key(Id)를 값 저장하기 위해 IDENTITY_INSERT ON
	SET IDENTITY_INSERT TB_B ON
	INSERT INTO TB_B (Id ,ProjectName) VALUES (@oId ,@pProjectName)
	SET IDENTITY_INSERT TB_B OFF 

 

http://technet.microsoft.com/ko-kr/library/bb522522(v=sql.105).aspx

 

 

image

TEST1 테이블에는 데이터가 없다 . MERGE 를 통해서 데이터 삽입

 

    MERGE TEST1  AS T

      USING  TEST2 AS S
      ON S.PostID = T.PostID

        WHEN MATCHED THEN

        UPDATE SET [NO] = S.[NO]

        WHEN NOT MATCHED THEN

        INSERT VALUES(S.[NO] , S.NAME)

        WHEN NOT MATCHED BY SOURCE THEN 
        DELETE;

    SELECT  * FROM TEST1    
    SELECT  * FROM TEST2

image

 

또는

    MERGE TEST1  AS T

      USING  ( SELECT 100 AS [NO] , 'KOJAEDOO' AS NAME , 0 AS POSTID) AS S
      ON S.PostID = T.PostID

        WHEN MATCHED THEN

        UPDATE SET [NO] = S.[NO]

        WHEN NOT MATCHED THEN

        INSERT VALUES(S.[NO] , S.NAME)

        WHEN NOT MATCHED BY SOURCE THEN 
        DELETE;

    SELECT  * FROM TEST1    
    SELECT  * FROM TEST2

image

ERWIN에서 MS Sql 디비를  Reverse Engineer 안될때

http://www.microsoft.com/ko-kr/download/details.aspx?id=24793 사이트가서

sqlncli.ms 또는 sqlncli_x64.msi 를 받아서 설치하고 재시작하면된다.

 

 

 

image

image

 

어느날 갑자기 위에 그림과 같이 됨 ㅡ_ㅡ;

아래와 같이 스크립트를 실행시켜주면 된다.

 

EXEC sp_resetstatus 'ReportServer';
ALTER DATABASE ReportServer SET EMERGENCY
DBCC checkdb('ReportServer')
ALTER DATABASE ReportServer SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('ReportServer', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE ReportServer SET MULTI_USER



EXEC sp_resetstatus 'ReportServerTempDB';
ALTER DATABASE ReportServerTempDB SET EMERGENCY
DBCC checkdb('ReportServerTempDB')
ALTER DATABASE ReportServerTempDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('ReportServerTempDB', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE ReportServerTempDB SET MULTI_USER

 

sp_resetstatus :

주의 대상 데이터베이스의 상태를 다시 설정합니다.

http://msdn.microsoft.com/ko-kr/library/ms188424.aspx

checkdb :

지정한 데이터베이스에서 다음 작업을 수행하여 모든 개체의 논리적 무결성 및 물리적 무결성을 검사합니다.

http://msdn.microsoft.com/ko-kr/library/ms176064.aspx

 

WHILE

http://msdn.microsoft.com/ko-kr/library/ms178642.aspx

USE AdventureWorks2008R2;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
   UPDATE Production.Product
      SET ListPrice = ListPrice * 2
   SELECT MAX(ListPrice) FROM Production.Product
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
      BREAK
   ELSE
      CONTINUE
END
PRINT 'Too much for the market to bear';

IF ELSE

http://msdn.microsoft.com/ko-kr/library/ms182717.aspx

IF @cost <= @compareprice 
BEGIN
    PRINT 'These products can be purchased for less than 
    $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.'
END
ELSE
    PRINT 'The prices for all products in this category exceed 
    $'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.'

CASE

http://msdn.microsoft.com/ko-kr/library/ms181765.aspx

USE AdventureWorks2008R2;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;

비이상적으로 가득찬 로그파일을 정리

작업하시기전에 꼭 백업해두삼

image

image

 

테스크 > 축소 > 파일 선택 (데이터베이스는 전체를 축소한다)

 

일단 MDF  파일부터 줄여보자

image

실행 후 1메가 줄었네 더럽게 많이도 줄었구만.. ㅋ

image

어차피 ldf 로그파일이 문제 이것을 날려버리자

1.7기가 정도 자리 차지하고 있다

아까 멘치로  파일선택

image

여기서 로그를 선택한다.

image

image

거의 변화가 없다;

이럴 땐 쿼리편집기에서 아래와 같이 입력

WPF_PersonnelManagement 은 테이블명

backup log WPF_PersonnelManagement with truncate_only

 

 

image

완료후 다시 한번 축소를 진행

image

 

image

 

제대로 줄었따!!

 

[@@Identity] MS-SQL 자동증감값 알기

마지막으로 삽입된 ID 값을 반환하는 시스템 함수입니다.

USE AdventureWorks;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity'; –마지막에 들어간 값을 알수 있다.
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO

--아래두개는 같은 의미인데 @@Identity가    더 빠르고 편리함

DECLARE @P_ID INT 

SELECT TOP 1 @P_ID =POSTID FROM [ 테이블 ] ORDER BY POSTID DESC
PRINT @P_ID

SELECT @P_ID=  @@Identity     
PRINT @P_ID 

 

@@CONNECTIONS

마지막으로 SQL Server를 시작한 후 시도한 연결 수를 반환합니다.
* 연결은 사용자와 다릅니다. 예를 들어 응용 프로그램은 연결을 관찰하는 사용자 없이 SQL Server와의 연결 여러 개를 열 수 있습니다.
고로 연결개수는 접속사용자가 아님~

SELECT GETDATE() AS 'Today''s Date and Time', 
@@CONNECTIONS AS 'Login Attempts'

결과값

Today's Date and Time  Login Attempts
---------------------- --------------
12/5/2006 10:32:45 AM  211023   

@@CURSOR_ROWS  

현재 연결에 대해 열려 있는 마지막 커서에서 한정하는 행 수를 반환합니다. 성능 향상을 위해 SQL Server는 큰 키 집합과 정적 커서를 비동기식으로 채울 수 있습니다. @@CURSOR_ROWS를 호출하여 커서가 한정하는 행의 수를 검색할 수 있습니다.

USE AdventureWorks2008R2;
GO
SELECT @@CURSOR_ROWS;
DECLARE Name_Cursor CURSOR FOR
SELECT LastName ,@@CURSOR_ROWS FROM Person.Person;
OPEN Name_Cursor;
FETCH NEXT FROM Name_Cursor;
SELECT @@CURSOR_ROWS;
CLOSE Name_Cursor;
DEALLOCATE Name_Cursor;
GO  


 

SELECT COUNT(SUB_NICK_NAME .COUNT_MEMBER_ID) AS COUNT_MEMBER_ID 


FROM


(SELECT COUNT(MEMBER_ID) AS COUNT_MEMBER_ID FROM LOGIN_CONFIG 

GROUP BY MEMBER_ID) 
AS SUB_NICK_NAME --//서브쿼리에 별칭주다

+ Recent posts