Я пытаюсь проверить количество таблиц, но запрос непрерывно выполняется в течение 20 минут. Что может быть не так?
IF((select COUNT(1) from test.[dbo].[as_EmployeeData] (nolock) ed
JOIN test.[dbo].DepartmentData dd ON ed.EmployeeId= dd.DepartmentData
AND dd.Name = 'IT' AND dd.Status = 'Completed')= 0
)
BEGIN
PRINT 'Successful'
END
ELSE
BEGIN
PRINT 'Failed'
END
Принимая во внимание, что если я запускаю приведенный ниже запрос, я получаю результат как 0
select COUNT(1) from test.[dbo].[as_EmployeeData] (nolock) ed
JOIN test.[dbo].DepartmentData dd ON ed.EmployeeId= dd.DepartmentData
AND dd.Name = 'IT' AND dd.Status= 'Completed'
3 ответа
Один из вариантов - вставить его в переменную:
DECLARE @myCount INT = (SELECT COUNT(1)
FROM test.[dbo].[as_EmployeeData] ed
INNER JOIN test.[dbo].DepartmentData dd
ON dd.DepartmentData = ed.EmployeeId
AND dd.Name = 'IT'
AND dd.Status= 'Completed');
IF @myCount != 0
BEGIN
PRINT 'Successful'
END
ELSE
BEGIN
PRINT 'Failed'
END
Однако COUNT
будет постепенно становиться все более и более неэффективным по мере ввода все большего количества данных.
Лучше всего выполнить проверку EXISTS
:
IF EXISTS (SELECT TOP 1 1
FROM test.[dbo].[as_EmployeeData] ed
INNER JOIN test.[dbo].DepartmentData dd
ON dd.DepartmentData = ed.EmployeeId
AND dd.Name = 'IT'
AND dd.Status= 'Completed')
BEGIN
PRINT 'Successful'
END
ELSE
BEGIN
PRINT 'Failed'
END
Тем не менее, я не вижу логической причины для такого запроса; что еще вы делаете в блоке if/else?
Вы можете попробовать сделать top 1
вместо подсчета, а затем использовать exists
IF ( exists( select top 1 1
from test.[dbo].[as_EmployeeData] ed
JOIN test.[dbo].DepartmentData dd
ON ed.EmployeeId = dd.DepartmentData
AND dd.Name = 'IT'
AND dd.Status = 'Completed'
)
)
BEGIN
PRINT 'Successful'
END
ELSE
BEGIN
PRINT 'Failed'
END
IF NOT EXISTS(SELECT 1
FROM test.[dbo].[as_EmployeeData] AS ED WITH(NOLOCK)
INNER JOIN test.[dbo].DepartmentData AS DD WITH(NOLOCK) ON ED.EmployeeId = DD.DepartmentData
WHERE DD.[Name] = 'IT' AND DD.[Status] = 'Completed')
BEGIN
PRINT 'Successful'
END
ELSE
BEGIN
PRINT 'Failed'
END
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
IF NOT EXISTS(select 1 from test.[dbo].[as_EmployeeData] (nolock) ed JOIN test.[dbo].DepartmentData dd ON ed.EmployeeId= dd.DepartmentData AND dd.Name = 'IT' AND dd.Status = 'Completed' ) BEGIN PRINT 'Successful' END ELSE BEGIN PRINT 'Failed' END
@SMor