itsource

MySQL 열거형 데이터 유형과 동일한 SQL Server?

mycopycode 2023. 4. 7. 21:17
반응형

MySQL 열거형 데이터 유형과 동일한 SQL Server?

SQL Server 2008에는 MySQL과 같은 데이터 타입이 있습니까?enum?

그렇지 않아요.애매한 등가물이 있습니다.

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))

여기서 찾은 가장 좋은 해결책은 가능한 값을 프라이머리 키로 하여 룩업 테이블을 만들고 룩업 테이블에 대한 외부 키를 작성하는 것입니다.

IMHO 룩업테이블은 참조 무결성을 갖춘 방법입니다.단, 다음과 같은 예에 따라 "Evil Magic Numbers"를 회피하는 경우에만 해당됩니다.T4를 사용하여 데이터베이스 룩업테이블에서 열거형 생성

재미있게 보내!

CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 0
END

GO

CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 1
END

-- etc...

퍼포먼스가 중요한 경우에도 하드한 값을 사용합니다.

아마도 이를 위한 가장 좋은 솔루션은 단순한 룩업 테이블(룩업 테이블이란?)일 것입니다.다만, 다음과 같은 것을 실장할 수 있습니다.

솔루션

SQL Server Management Studio (SSMS)

sql server enum 구현

User.Role[외부 키]가 여기에 있고Role.Type는 참조하는 프라이머리 키입니다.이 표에는 다음과 같은 값이 표시됩니다.

enum 테이블의 값

  • 테이블에서 일치해야 하는 유형입니다.이 경우 그 유형은 다음과 같습니다.nvarchar(15)
  • 에 값을 추가하려고 하면User.Role에서 구할 수 있는 것과 다르다Role표, 에러가 표시됩니다.

여기에 이미지 설명 입력

SQL 코드

CREATE TABLE [dbo].[User](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Username] [nvarchar](50) NOT NULL,
    [Email] [nvarchar](75) NOT NULL,
    [Password] [nvarchar](25) NOT NULL,
    [Role] [nvarchar](15) NOT NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_Role] FOREIGN KEY([Role])
REFERENCES [dbo].[Role] ([Type])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Role]
GO
CREATE TABLE [dbo].[Role](
    [Type] [nvarchar](15) NOT NULL,
 CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
(
    [Type] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

솔루션 2

다음과 같은 룩업 테이블을 구현할 수 있습니다. SQL Server에서 열거형 생성

이런 걸 해볼 수 있어요.

ALTER TABLE dbo.yourTable
ADD CONSTRAINT yourColumn CHECK(yourColumn IN('XL','L','M','S','XS'))

언급URL : https://stackoverflow.com/questions/1434298/sql-server-equivalent-to-mysql-enum-data-type

반응형