- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 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
Ccik 28.01.2013 12:21 # 0
DBdev 28.01.2013 12:38 # +1
1. set @count=0
SELECT @count=@count+count(NAME)
такая техника обычно используется для рекурсивного накопления результата. Это банально заменяется на SELECT @count=count(*), без SET.
2. Не так очевиден. Использование syscolumns (тяжкое наследие с 2000 сервера), и это с учетом того, что писавший знал, что этот код будет в дальнейшем использоваться на 2008 и 2012 сервере, но никогда на 2000.