Я пытаюсь понять, почему переменная обрабатывается по-разному, когда она передается в подзапросе в выражении «if», но отлично работает при выполнении независимо.Передача переменной в db_id()
Успешный один
select db_id((Select name from sys.databases where database_id > 4))
Результат:
DBSIZE
--------
5
Где она возвращает Null:
Declare @dbcount int;
set @dbcount = (Select count(*) from sys.databases where database_id > 4);
If @dbcount = 1
Begin
select usedspace as 'DBSize'
from
(
SELECT (s.size * CONVERT(float,8))/1024 AS [Size],
(CAST(CASE s.type WHEN 2 THEN 0 ELSE CAST(FILEPROPERTY(s.name, 'SpaceUsed') AS float)* CONVERT(float,8) END AS float))/1024 AS [UsedSpace],
s.file_id AS [ID]
FROM
sys.filegroups AS g
INNER JOIN sys.master_files AS s ON ((s.type = 2 or s.type = 0) and s.database_id = db_id((Select name from sys.databases where database_id > 4)) and (s.drop_lsn IS NULL)) AND (s.data_space_id=g.data_space_id)
) DBFileSizeInfo
End
else
Print 'The instance has more than 1 database'
Результат:
DBSize
---------
NULL
Я вроде бы шел к этому направлению. Спасибо за вашу помощь –