Сначала у меня есть веб-приложение ASP.NET MVC и код Entity Framework. Я использую хранимую процедуру и представления и функции для своего раздела отчета в своем проекте. Затем я хочу, чтобы после обновления моей базы данных эти хранимые процедуры и представления и функции dos не очищались и не падали после обновления. Я использую этот путь, и я хочу проверить, не существует ли этот объект, а затем создать его, но когда я запустил этот код, ящик пакета Nuget сказал, что «CREATE/ALTER PROCEDURE» должно быть первым оператором в пакете запросов.Как проверить наличие хранимой процедуры и просмотреть и использовать в методе семени Entity Framework?
Я не знаю, что это неправильно в моем коде какие-либо советы или трюк приветствовалось бы я не много времени, чтобы ждал этого вопроса, пожалуйста, пришлите мне немедленно ответить заранее спасибо
context.Database.ExecuteSqlCommand(@"IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'stp_Report1-2')
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE PROCEDURE [dbo].[stp_Report1-2]
@startDate char(10),
@endDate char(10),
@ContractorTitle nvarchar(100)
AS
BEGIN
-- setting the smallest date to filter
if(@startDate is null) SET @startDate='1300/01/01'
--setting the end date the current date if it has not been set
if(@endDate is null)SET @endDate=dbo.GetShamsiDate(GetDate())
if(@ContractorTitle is null)SET @ContractorTitle=''
SELECT *
from Raja.dbo.[Report1-2]
where [contractor_title][email protected] and export_date between @startDate and @endDate
Order by export_date desc
END
");
и когда Я использую этот код вместо кода, я получаю эту ошибку в Nuget
Неправильный синтаксис около 'GO'.
Неправильный синтаксис около 'GO'.
«CREATE/ALTER PROCEDURE» должно быть первым оператором в пакете запросов.
Код:
context.Database.ExecuteSqlCommand(@"IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'stp_Report1-2')
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[stp_Report1-2]
@startDate char(10),
@endDate char(10),
@ContractorTitle nvarchar(100)
AS
BEGIN
-- setting the smallest date to filter
if(@startDate is null) SET @startDate='1300/01/01'
--setting the end date the current date if it has not been set
if(@endDate is null)SET @endDate=dbo.GetShamsiDate(GetDate())
if(@ContractorTitle is null)SET @ContractorTitle=''
SELECT *
from Raja.dbo.[Report1-2]
where [contractor_title][email protected] and export_date between @startDate and @endDate
Order by export_date desc
END
");
и если я использую этот код эти ошибки
Неправильный синтаксис около ключевого слова 'PROCEDURE'.
Должен объявить скалярную переменную «@startDate».
Должен объявить скалярную переменную «@startDate».
Должен объявить скалярную переменную «@endDate».
Должен объявить скалярную переменную «@endDate».
Должен объявить скалярную переменную "@ContractorTitle".
Должен объявить скалярную переменную "@ContractorTitle".
Должен объявить скалярную переменную "@ContractorTitle".
Код:
context.Database.ExecuteSqlCommand(@"IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'stp_Report1-2')
CREATE PROCEDURE [dbo].[stp_Report1-2]
@startDate char(10),
@endDate char(10),
@ContractorTitle nvarchar(100)
AS
BEGIN
-- setting the smallest date to filter
if(@startDate is null) SET @startDate='1300/01/01'
--setting the end date the current date if it has not been set
if(@endDate is null)SET @endDate=dbo.GetShamsiDate(GetDate())
if(@ContractorTitle is null)SET @ContractorTitle=''
SELECT *
from Raja.dbo.[Report1-2]
where [contractor_title][email protected] and export_date between @startDate and @endDate
Order by export_date desc
END
");
Вы можете выполнить ute только ** одна ** команда за раз с * ExecuteSqlCommand *. –
, то как я могу получить его до одной команды? –
Это может помочь: http://stackoverflow.com/questions/8809485/how-can-i-define-a-stored-procedure-in-entity-framework-code-first – Mike