1. SQL / Говнокод #12479

    −170

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    DECLARE @Schema_Name nvarchar(128)
    DECLARE @Table_Name nvarchar(128)
    
    SET @Schema_Name='dbo'
    SET @Table_Name='TestTable'
    
    declare @count int
    set @count=0
    
    
    SELECT @count=@count+count(NAME)
    FROM syscolumns
    WHERE SCHEMA_NAME( OBJECTPROPERTY( ID, 'SCHEMAID' ))=@Schema_Name and OBJECT_NAME(id) = @Table_Name AND COLUMNPROPERTY(id, name, 'IsIdentity') = 1
    
    if @count>0 
    begin
    SELECT '['+name+']' as Test_Result, convert(smallint,0) as Severity 
    FROM syscolumns
    WHERE SCHEMA_NAME( OBJECTPROPERTY( ID, 'SCHEMAID' ))=@Schema_Name and OBJECT_NAME(id) = @Table_Name AND COLUMNPROPERTY(id, name, 'IsIdentity') = 1
    
    end 
    else
    SELECT 'No identity insert column' as Test_Result, convert(smallint,100) as Severity

    MS SQL Server 2005
    Задание: проверить, есть ли у заданной таблички identity_insert колонка.

    Запостил: DBdev, 25 Января 2013

    Комментарии (2) RSS

    • да, как-то проще я это делал
      Ответить
      • Даже если закрыть глаза на дублирование проверочной логики, то тут есть 2 момента:
        1. set @count=0
        SELECT @count=@count+count(NAME)
        такая техника обычно используется для рекурсивного накопления результата. Это банально заменяется на SELECT @count=count(*), без SET.
        2. Не так очевиден. Использование syscolumns (тяжкое наследие с 2000 сервера), и это с учетом того, что писавший знал, что этот код будет в дальнейшем использоваться на 2008 и 2012 сервере, но никогда на 2000.
        Ответить

    Добавить комментарий