Я советую вам прочитать о CORS в целом: https://developer.mozilla.org/de/docs/Web/HTTP/CORS
Чтобы решить вашу проблему, вы необходимо настроить ваш веб-сервер, чтобы разрешить этот источник, например, с помощью этого промежуточного программного обеспечения: https://github.com/barryvdh/laravel-cors
См. раздел «Конфигурация» документов, касающихся allowedOrigins
.
С наилучшими пожеланиями
Следующий запрос должен получить Вас список приложений, которым НЕ определили праздник для ТЕКУЩЕЙ ДАТЫ.
SELECT apps.ApplicationName, apps.isavailable
FROM dbo.Applications apps
WHERE apps.ApplicationName = @AppName
AND NOT EXISTS
( SELECT *
FROM Holidays
WHERE ApplicationId = apps.ApplicationId
AND CONVERT(VARCHAR,getdate(),101) = CONVERT(VARCHAR,holidaydate,101)
)
В основном то, что мы делаем, выбрать все, где это не имеет соответствия.
Можно использовать, "ГДЕ НЕ СУЩЕСТВУЕТ":
SELECT *
FROM Applications a
WHERE NOT EXISTS (
SELECT *
FROM Holidays h
WHERE h.ApplicationID = a.ApplicationID
AND HolidayDate = cast(cast(getdate() as int) as datetime)
)
Я делаю, бросок там для усечения getdate () перезванивают на просто дату. Не протестировали тот точный запрос, но я думаю, что он сделает задание для Вас.
SELECT a.isAvailable
FROM Application a
WHERE NOT EXISTS (
SELECT TOP 1 0
FROM Holidays b
WHERE a.applicationid = b.applicationid
AND holidaydate = $today
)
Хорошо, только чтобы отличаться, как насчет чего-то вроде этого:
select apps.isavailable
from dbo.Application apps left outer join dbo.Holidays hol
on apps.applicationid = hol.applicationid
and convert(varchar(10),getdate(),101) = convert(varchar(10),hol.holidaydate,101)
where apps.applicationname = @appname
and hol.applicationid is null
В основном Вы присоединяетесь к таблицам на основе applicationid и текущей даты. Так как это - левое соединение, Вы будете всегда получать все приложения, которые соответствуют @appname, затем Вы просто отфильтровываете любые результаты, которые получают соответствие на основе праздничной даты, являющейся текущей датой. Предполагая, что applicationname уникален, Вы будете всегда получать одну строку, где правильная половина соединения является пустой, если текущая дата не будет соответствовать празднику, в этом случае запрос не возвратит результатов.
Я не знаю, как это складывает с другими мудрыми производительностью решениями; я полагаю, что соединения, как обычно предполагается, быстрее, чем подзапросы, но это, вероятно, зависит от множества факторов, таким образом, YMMV.
Сделайте что-то вроде этого:
SELECT (fields) FROM Application
WHERE NOT EXISTS
(SELECT * FROM Holidays
WHERE ApplicationID = Application.ApplicationID
AND DAY(getdate()) = DAY(holidaydate)
AND MONTH(getdate()) = MONTH(holidaydate)
AND YEAR(getdate()) = YEAR(holidaydate)
)
Конечно, это было бы намного легче и быстрее с типом данных "ДАТЫ" 2008 SQL Server, или если Вы могли бы сохранить день, месяц, год в "Праздниках" отдельно.
Marc