복붙노트

[SQL] SQL Server의 SYSNAME 데이터 형식은 무엇입니까?

SQL

SQL Server의 SYSNAME 데이터 형식은 무엇입니까?

에 대한 SQL 서버 SYSNAME 데이터 형식이 무엇입니까? BOL는 말합니다 :

하지만 난 정말 그렇게하지 않습니다. 당신이 제공 할 수있는 사용 사례가 있습니까?

해결법

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

    1.은 sysname은 스크립트를 만들 때 저장소 개체 이름에 주로 사용되며, IIRC, 128 개 유니 코드 문자로 제한 데이터 형에 내장되어 있습니다. 그 값은 NULL 일 수 없습니다

    은 sysname은 스크립트를 만들 때 저장소 개체 이름에 주로 사용되며, IIRC, 128 개 유니 코드 문자로 제한 데이터 형에 내장되어 있습니다. 그 값은 NULL 일 수 없습니다

    그것은 기본적으로 NVARCHAR (128) NOT을 사용하는 것과 같습니다 NULL

    편집하다

    코멘트에 @Jim에서 언급 한 바와 같이, 나는 당신이 정직은 sysname을 사용 비즈니스 케이스가 정말 있다고 생각하지 않습니다. 내부 SYS 테이블과 SQL 서버 내 저장 프로 시저 등을 구축 할 때 그것은 주로 마이크로 소프트에 의해 사용됩니다.

    은 sysname이 그대로의 값이 그 자체의 개체 (테이블)을 실제적이기 때문에, 예를 들면, 간부 sp_help는 'sys.tables'을 수행하여 열 이름을 정의됨을 볼

    나는 그것에 대해 너무 걱정됩니다.

    그것은는 sysname 유형에 내장 된 사람들은 여전히 ​​SQL 서버 6.5를 사용하고 절감을 위해 (여전히 그것을 사용하는 사람들입니까?) 것을 VARCHAR에 해당되는 주목할 (30) 가치

    선적 서류 비치

    은 sysname은주의 섹션에서 NCHAR 및 NVARCHAR, 설명서로 정의된다 :

    기본은 sysname은 NOT NULL로 정의하여 위의 발언을 명확하게하기 위해, 널 (NULL)로 정의 할 확실히 가능하다. 정확한 정의는 SQL Server 인스턴스에 따라 다를 수 있다는 것을주의하는 것이 중요하다.

    특수 데이터 형식을 사용하여

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

    2.혹시 일부 동적 SQL을 작성하기위한 필요가있는 경우는 테이블 이름, 열 이름 및 서버 이름을 들고 변수에 대한 데이터 유형으로는 sysname을 사용하는 것이 적절하다.

    혹시 일부 동적 SQL을 작성하기위한 필요가있는 경우는 테이블 이름, 열 이름 및 서버 이름을 들고 변수에 대한 데이터 유형으로는 sysname을 사용하는 것이 적절하다.

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

    3.그냥 .... 참고로하여 AS

    그냥 .... 참고로하여 AS

    system_type_id = 231 당신이 개 행을 제공 sys.types에서 *를 선택합니다.

    (내가하지 않도록 어떤이 수단 아직이야하지만 난 100 % 확신은 지금 내 코드를 어질러 해요)

    편집 : 나는 그것이 무엇을 의미하는 것은 당신이 가능하게 user_type_id와 일 esystem_type_id 모두이 상황에서 user_type_id에 의해 가입 (내 상황) 또는해야한다는 것입니다 생각

    name        system_type_id   user_type_id   schema_id   principal_id    max_length  precision   scale   collation_name                  is_nullable     is_user_defined     is_assembly_type    default_object_id   rule_object_id
    nvarchar    231              231            4           NULL            8000        0           0       SQL_Latin1_General_CP1_CI_AS    1               0                   0                   0                   0
    sysname     231              256            4           NULL            256         0           0       SQL_Latin1_General_CP1_CI_AS    0               0                   0                   0                   0
    
    create procedure dbo.yyy_test (
        @col_one    nvarchar(max),
        @col_two    nvarchar(max)  = 'default',
        @col_three  nvarchar(1),
        @col_four   nvarchar(1)    = 'default',
        @col_five   nvarchar(128),
        @col_six    nvarchar(128)  = 'default',
        @col_seven  sysname  
    )
    as begin 
    
        select 1
    end 
    

    이 쿼리 :

    select  parm.name AS Parameter,    
            parm.max_length, 
            parm.parameter_id 
    
    from    sys.procedures sp
    
            join sys.parameters parm ON sp.object_id = parm.object_id 
    
    where   sp.name = 'yyy_test'
    
    order   by parm.parameter_id
    

    수율 :

    parameter           max_length  parameter_id
    @col_one            -1          1
    @col_two            -1          2
    @col_three           2          3
    @col_four            2          4
    @col_five            256        5
    @col_six             256        6
    @col_seven           256        7
    

    이:

    select  parm.name as parameter,    
            parm.max_length, 
            parm.parameter_id,
            typ.name as data_type, 
            typ.system_type_id, 
            typ.user_type_id,
            typ.collation_name,
            typ.is_nullable 
    from    sys.procedures sp
    
            join sys.parameters parm ON sp.object_id = parm.object_id
    
            join sys.types typ ON parm.system_type_id = typ.system_type_id
    
    where   sp.name = 'yyy_test'
    
    order   by parm.parameter_id
    

    이것은 당신에게 제공합니다 :

    parameter   max_length  parameter_id    data_type   system_type_id  user_type_id    collation_name                  is_nullable
    @col_one    -1          1               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_one    -1          1               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_two    -1          2               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_two    -1          2               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_three   2          3               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_three   2          3               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_four    2          4               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_four    2          4               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_five    256        5               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_five    256        5               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_six     256        6               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_six     256        6               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    @col_seven   256        7               nvarchar    231             231             SQL_Latin1_General_CP1_CI_AS    1
    @col_seven   256        7               sysname     231             256             SQL_Latin1_General_CP1_CI_AS    0
    
  4. ==============================

    4.저 아래 사용 사례를 나열 할 수 있습니다. 희망이 도움이. 여기에는 DB '학생'에서 테이블 'Stud_dtls'의 표 소유자를 찾기 위해 노력하고있어. 미카엘이 언급 한 바와 같이 테이블 이름, 열 이름 및 서버 이름을 잡고 변수를 필요로 일부 동적 SQL을 만들기위한 필요가있을 때, sysname이며이 사용될 수있다. 그냥 그 점을 보완 할 수있는 간단한 예제를 제공 생각했다.

    저 아래 사용 사례를 나열 할 수 있습니다. 희망이 도움이. 여기에는 DB '학생'에서 테이블 'Stud_dtls'의 표 소유자를 찾기 위해 노력하고있어. 미카엘이 언급 한 바와 같이 테이블 이름, 열 이름 및 서버 이름을 잡고 변수를 필요로 일부 동적 SQL을 만들기위한 필요가있을 때, sysname이며이 사용될 수있다. 그냥 그 점을 보완 할 수있는 간단한 예제를 제공 생각했다.

    USE Students
    
    DECLARE @TABLE_NAME sysname
    
    SELECT @TABLE_NAME = 'Stud_dtls'
    
    SELECT TABLE_SCHEMA 
      FROM INFORMATION_SCHEMA.Tables
     WHERE TABLE_NAME = @TABLE_NAME
    
  5. ==============================

    5.은 sysname가 sp_send_dbmail에 의해 사용되는, "지정된 수신자에게 전자 메일 메시지를 보냅니다"및 msdb 데이터베이스에 위치하는 저장 프로 시저.

    은 sysname가 sp_send_dbmail에 의해 사용되는, "지정된 수신자에게 전자 메일 메시지를 보냅니다"및 msdb 데이터베이스에 위치하는 저장 프로 시저.

    마이크로 소프트에 따르면,

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

    6.FWIW, 당신은 방법으로하는 데이터베이스를 탐구하고자한다, 이런 유용한 시스템 SP 년대에 테이블 이름을 전달할 수 있습니다 :

    FWIW, 당신은 방법으로하는 데이터베이스를 탐구하고자한다, 이런 유용한 시스템 SP 년대에 테이블 이름을 전달할 수 있습니다 :

    DECLARE @Table sysname; SET @Table = 'TableName';
    EXEC sp_fkeys @Table;
    EXEC sp_help @Table;
    
  7. ==============================

    7.AT TIME ZONE의 SQL 서버 2016+ 기능을 사용하는 경우 또 다른 사용 사례입니다

    AT TIME ZONE의 SQL 서버 2016+ 기능을 사용하는 경우 또 다른 사용 사례입니다

    아래 문은 GMT로 변환 된 날짜를 반환합니다

    SELECT 
    CONVERT(DATETIME, SWITCHOFFSET([ColumnA], DATEPART(TZOFFSET, [ColumnA] AT TIME ZONE 'GMT Standard Time')))
    

    당신이 변수로 시간대를 통과 할 경우, 말 :

    SELECT 
    CONVERT(DATETIME, SWITCHOFFSET([ColumnA], DATEPART(TZOFFSET, [ColumnA] AT TIME ZONE @TimeZone)))
    

    다음 변수 요구 타입은 sysname 될 것을 (VARCHAR로 선언하면 오류가 발생할 것이다).

  8. from https://stackoverflow.com/questions/5720212/what-is-sysname-data-type-in-sql-server by cc-by-sa and MIT license