2014-12-02 2 views
2

Я не могу получить формат для моего вложенного if. В основном то, что я пытаюсь сделать, это запуститьВложенные операторы IF SQL

select columnproperty(object_id(@TableName),t.name,'IsIdentity') = 0 

против петли, созданной ниже. Если это Idendity Колум, я не хочу добавлять

DECLARE @TableName VARCHAR(50) 
SELECT @TableName ='Users' 
select -1 as colid, 'public class obj_' + @TableName + '{' 
union 

SELECT c.colid, 
      'public '+ 
       (CASE WHEN t.name IN ('int', 'bigint') THEN 'Int32?' 
        WHEN t.name IN ('nvarchar','varchar','text','ntext') THEN 'String' 
        WHEN t.name IN ('datetime','smalldatetime') THEN 'DateTime?' 
        WHEN t.name IN ('decimal') THEN 'Decimal?' 
        WHEN t.name IN ('bit') THEN 'Boolean?' 
        ELSE 'Unknown' 
       END) + ' ' + c.name + '{ get; set; }' 
     FROM syscolumns c JOIN 
      systypes t 
      ON t.xusertype=c.xusertype 
     WHERE id IN (SELECT id FROM sysobjects WHERE name = @TableName) 
      union 
      select 1000 as colid, '}' 

ответ

1

Используйте sys точки зрения, фильтр с sys.columns.is_identity

SELECT c.column_id, 
     'public '+ 
      (CASE WHEN t.name IN ('int', 'bigint') THEN 'Int32?' 
       WHEN t.name IN ('nvarchar','varchar','text','ntext') THEN 'String' 
       WHEN t.name IN ('datetime','smalldatetime') THEN 'DateTime?' 
       WHEN t.name IN ('decimal') THEN 'Decimal?' 
       WHEN t.name IN ('bit') THEN 'Boolean?' 
       ELSE 'Unknown' 
      END) + ' ' + c.name + '{ get; set; }' 
    FROM  
     sys.columns c 
    INNER JOIN 
     sys.types t ON c.user_type_id = t.user_type_id 
    WHERE 
     c.object_id = OBJECT_ID(@TableName) 
    AND 
     c.is_identity = 0 
    UNION 
     select 1000 as colid, '}' 
+0

Ах, спасибо так много. Это имеет смысл – TMB87

Смежные вопросы