SQL Server의 SYSNAME 데이터 유형은 무엇입니까?
SQL Server SYSNAME 데이터 타입의 용도는 무엇입니까?BOL은 다음과 같이 표시됩니다.
sysname 데이터 유형은 객체 이름을 저장하는 테이블 열, 변수 및 저장 프로시저 파라미터에 사용됩니다.
이해가 잘 안 돼요제공할 수 있는 사용 사례가 있습니까?
sysname
시 Unicode 문자(로 제한되는 입니다.은 cannot음음음음음음 be be be be be be be be be be be가 될 수 .NULL
으로는 사용법과 .nvarchar(128) NOT NULL
편집
했듯이 @Jim을 sysname
솔직히 말해서. Microsoft를 할 때 합니다.sys
SQL Server에서 사용할 수 있습니다.
를 들어, 「」를 실행해 .Exec sp_help 'sys.tables'
컬럼이 됩니다.name
되어 있습니다.sysname
이것은 이것의 가치가 실제로 그 자체로 객체이기 때문이다(표).
나는 그것에 대해 크게 걱정하지 않을 것이다.
Server5 하고 있는 사람이 Server 6.5의 이 포함되어 것도가 있습니다.에게는 다음과 같은 기본 제공 유형이 있습니다.sysname
상당하다varchar(30)
문서
sysname
는 및 비고 섹션에 기재되어 있는 매뉴얼과 함께 정의되어 있습니다.
sysname은 nvarchar(128)와 기능적으로 동등한 시스템 제공 사용자 정의 데이터 유형입니다.단, 늘은 아닙니다.sysname은 데이터베이스 객체 이름을 참조하기 위해 사용됩니다.
위의 발언을 명확히 하기 위해 기본적으로는 sysname은 다음과 같이 정의됩니다.NOT NULL
확실히 무효라고 정의할 수 있습니다.SQL Server를 사용합니다.
sysname 데이터 유형은 객체 이름을 저장하는 테이블 열, 변수 및 저장 프로시저 파라미터에 사용됩니다.sysname의 정확한 정의는 식별자 규칙과 관련되어 있습니다.따라서 SQL Server 인스턴스마다 다를 수 있습니다.sysname은 기본적으로는 nvarchar(128)와 동일하지만 기본적으로 sysname은 NOT NULL이 아닙니다.SQL Server 이전 버전에서는 sysname은 varchar(30)로 정의되어 있습니다.
「 」의 sysname
또는 NULL
값은 https://stackoverflow.com/a/52290792/300863 에서 확인할 수 있습니다.
디폴트라고 해서(NOT NULL이 아님) 보증은 없습니다.
제공할 수 있는 사용 사례가 있습니까?
동적 SQL을 생성할 필요가 있는 경우 사용하는 것이 적절합니다.sysname
테이블 이름, 열 이름 및 서버 이름을 포함하는 변수의 데이터 유형으로 지정합니다.
참고인으로서...
select * from sys.types where system_type_id = 231
2번입니다.
(아직 무슨 의미인지는 모르겠지만 100%는 내 코드를 망치고 있다고 확신해)
edit: 이 상황(내 상황)에서는 user_type_id에 의해 참여하거나 user_type_id와 system_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
아래에 사용 사례를 제시하겠습니다.도움이 됐으면 좋겠다.여기서 DB Students에서 테이블 'Students_dtls'의 테이블 소유자를 찾습니다.Mikael이 언급했듯이 sysname은 테이블 이름, 열 이름 및 서버 이름을 포함하는 변수를 필요로 하는 동적 SQL을 생성할 필요가 있을 때 사용할 수 있습니다.그의 요점을 보완하기 위해 간단한 예를 들어볼까 생각 중이야.
USE Students
DECLARE @TABLE_NAME sysname
SELECT @TABLE_NAME = 'Stud_dtls'
SELECT TABLE_SCHEMA
FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_NAME = @TABLE_NAME
sysname
요.sp_send_dbmail
"지정된 수신자에게 전자 메일메시지를 보내는 저장 프로시저"로 msdb 데이터베이스에 저장됩니다.
마이크로소프트에 따르면,
[ @profile_name = ] 'profile_name'
메시지를 보낼 프로필 이름입니다.profile_name은 sysname 유형으로 기본값은 NULL입니다.profile_name은 기존 데이터베이스 메일 프로필 이름이어야 합니다.profile_name이 지정되지 않은 경우 sp_send_dbmail은 현재 사용자의 기본 개인 프로파일을 사용합니다.사용자에게 기본 개인 프로파일이 없는 경우 sp_send_dbmail은 msdb 데이터베이스에 기본 공용 프로파일을 사용합니다.사용자에게 기본 개인 프로파일이 없고 데이터베이스에 대한 기본 공용 프로파일이 없는 경우 @profile_name을 지정해야 합니다.
FWIW는 다음과 같은 유용한 시스템 SP에 테이블 이름을 전달할 수 있습니다.데이터베이스를 탐색하려면 다음과 같이 하십시오.
DECLARE @Table sysname; SET @Table = 'TableName';
EXEC sp_fkeys @Table;
EXEC sp_help @Table;
다른 활용 사례는 SQL 기능을 하는 경우 2016+ 기능을 사용할 수 있습니다.AT TIME ZONE
아래 문장은 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
에러가 발생합니다).
제공할 수 있는 사용 사례가 있습니까?
데이터베이스 유지 보수 스크립트에서 사용할 개체 이름을 저장할 위치.예를 들어 스크립트는 날짜 열이 있는 특정 테이블에서 오래된 행을 삭제합니다.테이블 이름, 필터링할 열 이름 및 보관할 이력을 제공하는 테이블로 구성됩니다.다른 스크립트는 특정 테이블을 CSV 파일에 덤프하고 덤프할 테이블을 나열하는 테이블을 다시 설정합니다.이러한 설정 테이블에서는,sysname
테이블 및 열 이름을 저장합니다.
언급URL : https://stackoverflow.com/questions/5720212/what-is-sysname-data-type-in-sql-server
'programing' 카테고리의 다른 글
Visual Studio:콘텍스트 스위치 데드록 (0) | 2023.04.07 |
---|---|
sql 서버에서 더블을 나타내는 것은 무엇입니까? (0) | 2023.04.07 |
SQL Server에 동등한 것이 없는 경우 테이블 생성 (0) | 2023.04.07 |
제한 10..SQL Server에 20개 탑재 (0) | 2023.04.07 |
SQL Server 로그 파일을 잘라내는 명령어는 무엇입니까? (0) | 2023.04.07 |