[SQL] SQL Server의 SYSNAME 데이터 형식은 무엇입니까?
SQLSQL Server의 SYSNAME 데이터 형식은 무엇입니까?
에 대한 SQL 서버 SYSNAME 데이터 형식이 무엇입니까? BOL는 말합니다 :
하지만 난 정말 그렇게하지 않습니다. 당신이 제공 할 수있는 사용 사례가 있습니까?
해결법
-
==============================
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.혹시 일부 동적 SQL을 작성하기위한 필요가있는 경우는 테이블 이름, 열 이름 및 서버 이름을 들고 변수에 대한 데이터 유형으로는 sysname을 사용하는 것이 적절하다.
혹시 일부 동적 SQL을 작성하기위한 필요가있는 경우는 테이블 이름, 열 이름 및 서버 이름을 들고 변수에 대한 데이터 유형으로는 sysname을 사용하는 것이 적절하다.
-
==============================
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.저 아래 사용 사례를 나열 할 수 있습니다. 희망이 도움이. 여기에는 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.은 sysname가 sp_send_dbmail에 의해 사용되는, "지정된 수신자에게 전자 메일 메시지를 보냅니다"및 msdb 데이터베이스에 위치하는 저장 프로 시저.
은 sysname가 sp_send_dbmail에 의해 사용되는, "지정된 수신자에게 전자 메일 메시지를 보냅니다"및 msdb 데이터베이스에 위치하는 저장 프로 시저.
마이크로 소프트에 따르면,
-
==============================
6.FWIW, 당신은 방법으로하는 데이터베이스를 탐구하고자한다, 이런 유용한 시스템 SP 년대에 테이블 이름을 전달할 수 있습니다 :
FWIW, 당신은 방법으로하는 데이터베이스를 탐구하고자한다, 이런 유용한 시스템 SP 년대에 테이블 이름을 전달할 수 있습니다 :
DECLARE @Table sysname; SET @Table = 'TableName'; EXEC sp_fkeys @Table; EXEC sp_help @Table;
-
==============================
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로 선언하면 오류가 발생할 것이다).
from https://stackoverflow.com/questions/5720212/what-is-sysname-data-type-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엔티티 - 속성 - 값 테이블 디자인 (0) | 2020.04.04 |
---|---|
[SQL] T-SQL : 라운드 근처로 15 분 간격 (0) | 2020.04.04 |
[SQL] 오라클 : 'WHERE 절에`(+)의 기능은 무엇입니까? (0) | 2020.04.04 |
[SQL] C #에서 저장 프로 시저에서 반환 값을 얻기 (0) | 2020.04.04 |
[SQL] 사용 MySQL의 공간적 확장은 원 내부의 점을 선택합니다 (0) | 2020.04.04 |