programing

테이블에 ID 열이 있는지 식별하는 방법

telebox 2023. 9. 9. 09:25
반응형

테이블에 ID 열이 있는지 식별하는 방법

테이블에 아이덴티티 칼럼이 있는지 확인하고 싶습니다.저는 테이블을 모릅니다.저는 테이블 구조를 하지 않았습니다.쿼리 사용?

저는 SQL Server Compact Edition을 사용하고 있습니다.

IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectPropertysql server 2008부터 사용 가능 참조: ObjectPROPERTY

이 쿼리는 테이블의 ID 열 이름을 반환합니다.

CREATE PROCEDURE dbo.usp_GetIdentity
@schemaname nvarchar(128) = 'dbo'  
,@tablename nvarchar(128)
AS
BEGIN
    SELECT   OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
             NAME AS COLUMNNAME, 
             SEED_VALUE, 
             INCREMENT_VALUE, 
             LAST_VALUE, 
             IS_NOT_FOR_REPLICATION 
    FROM     SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename
    AND OBJECT_SCHEMA_NAME(object_id) = @schemaname
END

그런 다음 코드 쪽을 형성합니다.

데이터 리더 역할을 사용하여 이 저장 프로시저를 호출한 다음 확인합니다.datareader.hasrows(). 조건 값이 참일 경우 (1), 설정된 경우 테이블에 ID 열이 있습니다.그렇지 않은 경우 ID 열이 없습니다.

오래전 일이지만 도움이 된다는 것을 알았습니다.

시도해 보십시오.

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1)
BEGIN
   -- Do your things
END

다음 쿼리 중 하나를 사용하여 표에 ID 열이 있는지 확인할 수 있습니다.

1)

SELECT *
FROM sys.identity_columns
WHERE OBJECT_NAME(object_id) = 'TableName'

2)

SELECT *
FROM sys.identity_columns
WHERE object_id = (
        SELECT id
        FROM sysobjects
        WHERE name = 'TableName'
    )

가장 간단한 것처럼 이 옵션을 추가하고 싶습니다.

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')

이를 위한 한 가지 방법은 저장된 절차를 활용하는 것입니다.sp_help. 즉,

sp_help MyTable

그러면 테이블에 필요한 모든 정보가 있는 DataSet이 반환됩니다.아이덴티티에 대한 정보가 있는 특정 표가 있습니다.

즉,

ID 필드가 없으면 ID 열에 "No identity column defined"(아이덴티티 열이 정의되지 않았습니다)라고 표시됩니다.

@Pranay: 그는 콤팩트 에디션이라고 말했습니다.저장 프로시저는 지원되지 않으며, 시스템도 없습니다.아무거나.

다음은 전화입니다.

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

1(참) 또는 0(거짓)을 반환합니다.

... @tblhasIdentColbit = IF(IDENT_CURRENT( @dbName +'.'+ @schemaName +'.'+ @tableName ) IS NOT NULL, 1, 0 )

테이블에 ID가 있는 경우 숫자 값을 얻을 수 있습니다.

이를 실행하는 방법은 매우 간단합니다.

SELECT IDENT_CURRENT('TABLE-NAME')

이것은 존재하는 경우 최대 항등식 열 값을 제공하고, 만약 열이 존재하지 않는 경우에는 결과적으로 1을 제공합니다.

최대값을 기준으로 해당 열이 있는 열을 식별하고 식별 열을 결정할 수 있습니다.

선택한 데이터베이스에서 names, 열 이름, is_identity 또는 not table을 모두 얻을 수 있는 쿼리입니다.

SELECT
     sys.columns.name
   , sys.tables.name
   , is_identity
FROM sys.columns
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id
    AND sys.columns.is_identity = 1
CREATE FUNCTION dbo.fnTableHasIdentity(@Tbl sysname)
RETURNS TINYINT
BEGIN 
  RETURN OBJECTPROPERTY(OBJECT_ID(@Tbl), 'TableHasIdentity')
END 

그렇게 간단해요!

select t.name as TableName,c.name as ColumnName
from sys.identity_columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = 'TableName'

임의 데이터베이스의 테이블에 대해 이 작업을 수행할 수 있어야 했던 저를 좋아하신다면 다음과 같은 해결책을 찾았습니다.

IF EXISTS (
    SELECT 1
    FROM [database name].sys.identity_columns AS id_col
    INNER JOIN [database name].sys.objects
        ON objects.object_id = id_col.object_id
    INNER JOIN [database name].sys.schemas
        ON schemas.schema_id = objects.schema_id
        AND schemas.name = 'schema name'
    WHERE OBJECT_NAME(id_col.object_id, DB_ID('database name')) = 'table name'
) SELECT 1 ELSE SELECT 0

현재 테이블에 identityColumn이 있으면 1 또는 0 Boolean Form을 얻을 수 있습니다.

SELECT Count(Column_ID) FROM sys.identity_columns WHERE OBJECT_NAME(object_id) = 'tableName'

한 가지 " 에 을 할 이 을 하는 하는 을 에 이 and o.name='TableName'입니다. " 트발레 남 이 입니다 입니다 이 .

SELECT o.[Name][TableName],i.[name][IdentityColName] FROM 
sys.objects o 
left outer join sys.identity_columns i on i.object_id=o.object_id
where o.type='U'

언급URL : https://stackoverflow.com/questions/2871701/how-to-identify-whether-the-table-has-identity-column

반응형