Как перевести SQL запрос в строку?
Как перевести SQL запрос в строку?
IF OBJECT_ID (N'dbo.dicts', N'FN') IS NOT NULL
DROP FUNCTION dbo.dicts;
GO
IF OBJECT_ID (N'dbo.get_status', N'FN') IS NOT NULL
DROP FUNCTION dbo.get_status;
GO
IF OBJECT_ID (N'dbo.get_typ_act', N'FN') IS NOT NULL
DROP FUNCTION dbo.get_typ_act;
GO
IF OBJECT_ID (N'dbo.getuser_name', N'FN') IS NOT NULL
DROP FUNCTION dbo.getuser_name;
GO
CREATE FUNCTION dbo.get_typ_act(@typ int)
returns varchar(256)
as
begin
DECLARE @ret varchar(256)
if @typ = 0
select @ret = 'Неопределенное суд. дело';
if @typ = 1
select @ret = 'Приказ';
if @typ = 2
select @ret = 'Иск';
if @typ = 3
select @ret = 'Правопреемство';
if @typ = 4
select @ret = 'Банкротство';
return @ret
end;
go
Ранее просто вставлял в нотпад++ и заменял \r\n на " " и все прекрасно работало. Сейчас при таком образе выдает ошибки у каждой функции.
Сам запрос необходимо перенести в строку для того, чтобы отправлять запрос через OdbcConnect C# + докинуть в него where
UPD: Если перевести весь запрос в строку и попробовать вбить в SSMS выдает: Неправильный синтаксис около ключевого слова "GO"
Ответы (2 шт):
Вот так, наверное, можно?
var str = " IF OBJECT_ID (N'dbo.dicts', N'FN') IS NOT NULL \r\n DROP FUNCTION dbo.dicts; \r\nGO \r\nIF OBJECT_ID (N'dbo.get_status', N'FN') IS NOT NULL \r\n DROP FUNCTION dbo.get_status; \r\nGO \r\nIF OBJECT_ID (N'dbo.get_typ_act', N'FN') IS NOT NULL \r\n DROP FUNCTION dbo.get_typ_act; \r\nGO \r\nIF OBJECT_ID (N'dbo.getuser_name', N'FN') IS NOT NULL \r\n DROP FUNCTION dbo.getuser_name; \r\nGO\r\nCREATE FUNCTION dbo.get_typ_act(@typ int)\r\nreturns varchar(256)\r\nas\r\nbegin\r\n DECLARE @ret varchar(256)\r\n if @typ = 0\r\n select @ret = 'Неопределенное суд. дело';\r\n if @typ = 1\r\n select @ret = 'Приказ';\r\n if @typ = 2\r\n select @ret = 'Иск';\r\n if @typ = 3\r\n select @ret = 'Правопреемство';\r\n if @typ = 4\r\n select @ret = 'Банкротство';\r\n return @ret\r\nend;\r\ngo"
И, мне кажется, go в конце не нужен...
go - это команда SSMS. Такого ключевого слова нет в SQL.
Поэтому нужно удалить все go из sql-запроса.
Кроме того, CREATE FUNCTION может быть только единственным выражением в батче (пакете) SQL. Команда go как раз и разделяет код на батчи.
В C# этот код можно выполнить послав несколько отдельных запросов с помощью ExecuteNonQuery.