복붙노트

[SQL] 결과를 표시하지 않고 SQL 쿼리를 실행하는 방법

SQL

결과를 표시하지 않고 SQL 쿼리를 실행하는 방법

이 결과를 표시하지 않고 SQL 쿼리를 실행하는 것이 가능합니까?

처럼

Select * from Table_Name

이 쿼리의 결과를 실행 한 후 SQL 서버에 표시 할 수 없습니다.

해결법

  1. ==============================

    1.레코드를 반환합니다 실행. 그것은 물론 행이 없습니다하지만 결과를 얻을 수 있습니다

    레코드를 반환합니다 실행. 그것은 물론 행이 없습니다하지만 결과를 얻을 수 있습니다

    당신은 행을 억제하지만 SET FMTONLY하지 결과 집합 수

    SET FMTONLY ON
    SELECT * FROM sys.tables
    
    SET FMTONLY OFF
    SELECT * FROM sys.tables
    

    개인적으로하지만 그것을 위해 사용 없었 ...

    [편집] 2018 년으로 요즘 더 나은 솔루션을 @ deroby의 답변을 참조 주목

  2. ==============================

    2.나는 놀랄 아무도 대답과 함께 오지 해요 : 스위치를 옵션 "실행 후 폐기 쿼리 결과"에; 리터 나는 확신 면접관이 후 무엇였습니다입니다. SET FMT는 만 완전히 다른 일이 이럴입니다.

    나는 놀랄 아무도 대답과 함께 오지 해요 : 스위치를 옵션 "실행 후 폐기 쿼리 결과"에; 리터 나는 확신 면접관이 후 무엇였습니다입니다. SET FMT는 만 완전히 다른 일이 이럴입니다.

    에서 SSMS

    이 작업을 수행 할 수 있습니다 이유는 기다린 결과가 그리드에로드 할 자원을 낭비하지만 여전히 예를 들어,이 할 수있는 것을 방지하는 것입니다 실제 실행 계획.

  3. ==============================

    3.소리는 나에게 의심스러운 면접 질문을 좋아한다. 나는 내가 그것을 할 필요했습니다, 그것을 한 적이 있지만, 당신은 꽤 애매한 상황에서 그렇게해야 할 것입니다. 모호하지만 때로는 매우 중요합니다.

    소리는 나에게 의심스러운 면접 질문을 좋아한다. 나는 내가 그것을 할 필요했습니다, 그것을 한 적이 있지만, 당신은 꽤 애매한 상황에서 그렇게해야 할 것입니다. 모호하지만 때로는 매우 중요합니다.

    @gbn가 말한대로, 하나의 프로그램 방법은 SET FMTONLY 함께 (감사, 지금은 예전 스크립트 파일을 발굴 할 필요가 없습니다). SQL을 조회 할 때 일부 프로그램 및 유틸리티는이 작업을 수행; 그들은 그들이 그것을, FMTONLY OFF로 얻을 실제 데이터를 가져 오기 위해 실행하는 것이 준비했습니다 때 처음들은 후, 결과 테이블 구조의 레이아웃을 결정하기 위해, FMTONLY ON 사용하여 쿼리를 제출합니다. (프로 시저가 두 번째 절차라고 할 때 나는 두 번째 절차는 데이터 세트를 반환하고, 모호한 이유로 카드의 전체 집은 아래로 떨어졌다,이 밖으로을 발견했다.)

    이것은 또한 SSMS에서 수행 할 수 있습니다. 모든 쿼리 창를 들어, XX에 도구 / 옵션, 쿼리 결과 / SQL 서버 / 결과에서 "쿼리 실행 된 후 폐기 결과를"확인; 질의 / 질의 옵션, 결과 / XX, 같은 체크 박스 아래는 현재 창에. 여기 장점은 쿼리가 데이터베이스 서버에서 실행하는 것입니다,하지만 데이터 결과가 반환되지 않습니다. 당신은 몇 가지 심각한 루프 테스트를 수행하는 경우 SSMS 만 수용 할 수있는이, 당신은 쿼리 계획을 확인하는 경우 헤아릴 수 없을 수 있지만 (노트북에 네트워크를 통해) 데이터의 결과 기가 바이트 수신을 원하지 않는, 또는 는 "너무 많은 결과 집합"메시지와 함께 쿼리를 중지하기 전에 주어진 "실행"에서 너무 많은 결과 세트. [- 나는 그것이이 작업을 수행 생각하지만, 그것은 오랜 시간이되었습니다 흠, 그 "쿼리 계획 전용"에 나를 조금 더블 체크.]

  4. ==============================

    4.아마도 면접관은 다른 질문을하도록 :

    아마도 면접관은 다른 질문을하도록 :

    어떻게 결과의 수를 반환하지 않고 SQL 쿼리를 실행하는 것?

    이 경우 대답은 SET NOCOUNT ON 될 것이다.

  5. ==============================

    5.

    insert anothertable
    Select * from Table_Name
    

    선택이되지만 아무것도 실행하지

    set noexec on 
    Select * from Table_Name
    

    구문 분석하지만 실행하고 반환 아무것도 그렇게하지 않습니다.

  6. ==============================

    6.당신이 실행하는 쿼리를 필요로하지만, 실제 결과 집합을 필요로하지 않는 경우가있는 (또는 NOT EXISTS), 당신은 문을 쿼리를 래핑 할 수 있습니다 IF가 존재하는 (... TABLE_NAME SELECT * FROM). 또는 교대로, 당신은 나중에 임시 테이블을 삭제, #temp INTO 선택할 수 있습니다.

    당신이 실행하는 쿼리를 필요로하지만, 실제 결과 집합을 필요로하지 않는 경우가있는 (또는 NOT EXISTS), 당신은 문을 쿼리를 래핑 할 수 있습니다 IF가 존재하는 (... TABLE_NAME SELECT * FROM). 또는 교대로, 당신은 나중에 임시 테이블을 삭제, #temp INTO 선택할 수 있습니다.

  7. ==============================

    7.내 경우에는 내가, 예를 들어, 데이터가 모든 뷰에서 행동하는 것을 테스트했다 실제 데이터를 억누르고하는 표시 옵션이 없었다 어떤 캐스트 () 함수는 변환 오류 등을 일으키는 원인이되지 않았다 너무 나쁘지 않았다하지만 낭비 자원의 비트와 더 나은뿐만 아니라 텍스트로 결과를 전송하는 경우 diplsay합니다.

    내 경우에는 내가, 예를 들어, 데이터가 모든 뷰에서 행동하는 것을 테스트했다 실제 데이터를 억누르고하는 표시 옵션이 없었다 어떤 캐스트 () 함수는 변환 오류 등을 일으키는 원인이되지 않았다 너무 나쁘지 않았다하지만 낭비 자원의 비트와 더 나은뿐만 아니라 텍스트로 결과를 전송하는 경우 diplsay합니다.

    이 텍스트 / NTEXT 열이 뷰가 발생했을 때 나는 이런 식으로 모든 뷰를 테스트하려면 다음 스크립트를 함께했다 유일한 문제이다.

    declare csr cursor local for select name from sys.views order by name
    declare @viewname sysname
    declare @sql nvarchar(max)
    
    open csr
    fetch next from csr into @viewname
    while @@fetch_status = 0 begin
        --set @sql = 'select top 1 * from ' + @viewname 
    
        set @sql = 'declare @test nvarchar(max) select @test = checksum(*) from ' + @viewname 
    
        print @viewname
    
        exec sp_executesql @sql
        fetch next from csr into @viewname
    end
    close csr
    deallocate csr
    
  8. ==============================

    8.모든 행을 억제 할 수있는 목표인가? 그런 다음 모든 행에 대해 false로 평가하는 필터를 사용 :

    모든 행을 억제 할 수있는 목표인가? 그런 다음 모든 행에 대해 false로 평가하는 필터를 사용 :

    SELECT * FROM Table_Name WHERE 1 = 2
    
  9. ==============================

    9.방금 손상에 대한 예를 들어 테스트를위한 테이블의 모든 행을 읽고 싶을 때 또 다른 유스 케이스입니다. 이 경우 데이터 자체가 읽을 여부입니다 만 사실 필요하지 않습니다. 그러나, 옵션 이름 "실행 후 폐기 결과는"혼란 약간 - 그것은 결과를 가져올 만 한 후 폐기 있음을 알려줍니다. 수신 된 행은 즉시 삭제됩니다 (그리고 실행 후) - 반대로, 그것은 확실히 데이터를 가져하지만 어디를 저장하지 않습니다 (기본적으로 행이 그리드에 넣고, 또는 당신이 선택한 어떤 출력).

    방금 손상에 대한 예를 들어 테스트를위한 테이블의 모든 행을 읽고 싶을 때 또 다른 유스 케이스입니다. 이 경우 데이터 자체가 읽을 여부입니다 만 사실 필요하지 않습니다. 그러나, 옵션 이름 "실행 후 폐기 결과는"혼란 약간 - 그것은 결과를 가져올 만 한 후 폐기 있음을 알려줍니다. 수신 된 행은 즉시 삭제됩니다 (그리고 실행 후) - 반대로, 그것은 확실히 데이터를 가져하지만 어디를 저장하지 않습니다 (기본적으로 행이 그리드에 넣고, 또는 당신이 선택한 어떤 출력).

  10. ==============================

    10.나는 사회가 쉽게에 대한 사용 사례를 찾을 수 없습니다 놀라게하고있다. 대형 결과 세트는 많은 SSMS 창이 활성화되어있는 경우 (나 열 SSMS의 2-3 인스턴스, 50 ~ 70 활성 창에 각을하는 것은 드문 일이 아니다) 문제가 될 수있는 클라이언트의 메모리를 취할. 어떤 경우에는, 시릴의 예에서, SSMS 메모리가 부족하고 큰 결과 집합을 처리 할 단순히 수없는 수 좋아한다. 내가 행 수백만의 수백을 반환하는 저장 프로 시저를 디버깅하는 데 필요한 경우 예를 들어, 나는 사건이 있었다. 이 결과를 폐기하지 않고 내 개발 시스템에 SSMS에서 실행하는 것은 불가능하다. 절차가 데이터웨어 하우스 테이블을로드하기위한 데이터 소스로 사용 하였다 SSIS 패키지 하였다. (결과 집합이 나에게 전혀 관심이었다 때문에) 비 기능 변경을 SSMS에 참여 디버깅 및 실행 통계 및 실제 쿼리 실행 계획을 검사.

    나는 사회가 쉽게에 대한 사용 사례를 찾을 수 없습니다 놀라게하고있다. 대형 결과 세트는 많은 SSMS 창이 활성화되어있는 경우 (나 열 SSMS의 2-3 인스턴스, 50 ~ 70 활성 창에 각을하는 것은 드문 일이 아니다) 문제가 될 수있는 클라이언트의 메모리를 취할. 어떤 경우에는, 시릴의 예에서, SSMS 메모리가 부족하고 큰 결과 집합을 처리 할 단순히 수없는 수 좋아한다. 내가 행 수백만의 수백을 반환하는 저장 프로 시저를 디버깅하는 데 필요한 경우 예를 들어, 나는 사건이 있었다. 이 결과를 폐기하지 않고 내 개발 시스템에 SSMS에서 실행하는 것은 불가능하다. 절차가 데이터웨어 하우스 테이블을로드하기위한 데이터 소스로 사용 하였다 SSIS 패키지 하였다. (결과 집합이 나에게 전혀 관심이었다 때문에) 비 기능 변경을 SSMS에 참여 디버깅 및 실행 통계 및 실제 쿼리 실행 계획을 검사.

  11. ==============================

    11.난 단지 기록이 존재하는 결과를 보여, 특정 시점 이후에 지정된 사용자에 의해 업데이트 된 모든 레코드를 반환하는 PROC이 필요했습니다. 여기있어:

    난 단지 기록이 존재하는 결과를 보여, 특정 시점 이후에 지정된 사용자에 의해 업데이트 된 모든 레코드를 반환하는 PROC이 필요했습니다. 여기있어:

    -- Written by David Zanke
    -- Return all records modified by a specified user on or after a specified date. 
    
    
    If mod date does not exist, return row anyhow
    
    Set Nocount on 
    
    Declare @UserName varchar(128) = 'zanked'
        , @UpdatedAfterDate Varchar( 30)  = '2016-10-08'
        , @TableName varchar( 128)
        , @ModUser varchar( 128)
        , @ModTime varchar( 128)
        , @sql varchar( 2000 )
    
    
    -- In a perfect world, left join would be unecessary since every row that captures the last mod user would have last mod date.
    
    -- Unfortunately, I do not work in a perfect world and rows w/ last mod user exist w/o last mod date
    
    Declare UserRows Cursor for Select distinct c1.table_name, c1.column_name, c2.column_name  From INFORMATION_SCHEMA.COLUMNS c1
    
    Left Join INFORMATION_SCHEMA.COLUMNS c2 On c1.Table_Name = c2.Table_Name And c2.Column_name like '%DTTM_RCD_LAST_UPD%'
            Where c1.column_name like '%UPDATED_BY_USER%'
    
    
    Open UserRows
    
    Fetch UserRows Into  @tablename, @ModUser, @ModTime
    
    While ( @@FETCH_STATUS = 0 )
    Begin
        -- capture output from query into a temp table
    
        Select @sql = 'Select ''' + @TableName + ''' TableName, * Into ##HoldResults From ' + @TableName + ' Where ' + @ModUser + ' = ''' + @userName + ''''
                + Case When @ModTime Is Null Then '' Else   ' And ' + @ModTime + ' >= ''' + @UpdatedAfterDate + '''' End
    
        Exec ( @sql)
    
        -- only output where rows exist
        If @@ROWCOUNT > 0
        Begin
            Select * from ##HoldResults
        End
        Drop Table ##HoldResults
    
        Fetch UserRows Into  @tablename, @ModUser, @ModTime
    
    End
    Close UserRows;
    Deallocate UserRows
    
  12. from https://stackoverflow.com/questions/6386587/how-to-execute-sql-query-without-displaying-results by cc-by-sa and MIT license