Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Всем здравствуйте!

В MS SQL 2005 было так:
EXEC	@RetCode	= dbo.sp_OACreate
	'SQLDMO.SQLServer'		,
	@SqlDmoObject		OUT

После перехода на mssql 2012 эта строка перестала работать, прочел что нужно использовать вместо dmo - smo
Пишу так:
EXEC	@RetCode	= dbo.sp_OACreate
	'Microsoft.SqlServer.Management.Smo.Server',
	@SqlDmoObject		OUT

Но все равно та же ошибка - "Недопустимая строка с указанием класса"
Посмотрел, эти dll установлены.
Подскажите пожалуйста в чем может быть проблема

PS. Вообще это часть функции, которая вычисляет результат математического выражения, возможно ее проще чем-то заменить?
12 фев 14, 10:40    [15555206]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Stanislav
Всем здравствуйте!
PS. Вообще это часть функции, которая вычисляет результат математического выражения, записанного в виде строки, возможно ее проще чем-то заменить?
12 фев 14, 10:41    [15555212]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Написал CLR...
12 фев 14, 15:16    [15557502]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Stanislav
sp_OACreate 'Microsoft.SqlServer.Management.Smo.Server'
...jpg
Stanislav
После перехода на mssql 2012 эта строка перестала работать, прочел что нужно использовать вместо dmo - smo
Вы не то читали, вам надо OLE объект, а читали вы про .Net.


http://technet.microsoft.com/en-us/library/ms141187.aspx

DMO был удалён из инсталяции, и поставляется уже с Feature Pack. Но не рекомендуют использовать.
Да, SMO это только .Net.
13 фев 14, 12:34    [15562120]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Stanislav
Вообще это часть функции, которая вычисляет результат математического выражения, возможно ее проще чем-то заменить?

TRY_CONVERT ?
13 фев 14, 12:39    [15562151]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Glory
Stanislav
функции, которая вычисляет результат математического выражения
TRY_CONVERT ?
13 фев 14, 13:05    [15562333]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mnior
Glory
пропущено...
TRY_CONVERT ?

А вы как себе представляете хранение "математического выражения" ?
Я могу лишь представить в виде символьной строки.
Которую можно попробовать конвертировать к числовому типу
Иначе для чего бы еще ТСу понадобилось создавать коннект к SQLServer ?
Чтобы в нем выполнять теже TSQL команды, что он может выполнить в текущем коннекте ?

Сообщение было отредактировано: 13 фев 14, 13:09
13 фев 14, 13:07    [15562348]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
TRY_CONVERT, по мне, берёт данные в одном виде и преобразует в другой, и ничего не вычисляет.

'2+2' он не сможет конвертнуть в Int ибо знак '+' не числовой.

Или я чего-то не знаю?
13 фев 14, 13:27    [15562517]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mnior
Или я чего-то не знаю?

Наверное вы не заметили знак вопроса в конце моего предложения
13 фев 14, 13:36    [15562577]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Glory,

Заметил, но я даже как предположение не могу понять.

Ок.
13 фев 14, 14:34    [15562991]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mnior
Заметил, но я даже как предположение не могу понять.

Внимание
Какие _особые_ команды можно выполнять в MSSQL в соединении, сделанном через SQLDMO?
Какие _особые_ команды для "вычисляет результат математического выражения" можно выполнять в MSSQL в соединении, сделанном через SQLDMO?
13 фев 14, 14:38    [15563016]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Каклькулятор на основе DMO/SMO - это сильно. Если уж так нужна калькуляторная функция - нужно смотреть в сторону CLR-сборки на F#, которая выполняет парсинг синтаксического дерева - типа вот такого.
13 фев 14, 14:55    [15563127]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Glory
Какие особые команды можно выполнять в MSSQL в соединении, сделанном через SQLDMO?
Какие особые команды для "вычисляет результат математического выражения" можно выполнять в MSSQL в соединении, сделанном через SQLDMO?
Ну какие-то можно ведь, какая разница особые или нет, главное гибкость и динамика (не привязанность).
Я то не спорю что калькулятор через SQLDMO - извращение.
Но причём тут TRY_CONVERT вообще, он никакие вычисление делать не может, а только преобразование типа данных (из строки).

Притом "Try" элемент не думаю что вообще в тему, валидность и правильность выражения/данных тут даже не касается вопрос.
А "Convert" он и в Африке.

Вот для меня и стало удивительно, как это вдруг "Convert" вдруг стал Eval-ом. Особенно когда это пишет не просто мимопроходил, а сам Glory.
14 фев 14, 16:40    [15569341]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Stanislav
Вообще это часть функции, которая вычисляет результат математического выражения, возможно ее проще чем-то заменить?

Кстати, если нужен калькулятор, со сервер сам себе неплохой калькулятор, и почему бы не использовать
declare
  @n int;
exec sp_executesql N'select @n=1+4*3/6', N'@n int out', @n out;
14 фев 14, 17:00    [15569465]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Изначально нужен был именно калькулятор и именно в функции. С этим справлялась функция, которая делала коннект к ms sql и его силами выполняла вычисления. При этом имеешь кучу полезных функций, все что есть в SQL.
т.е. функция принимала и вычисляла ('2+2*3+sin(3.14)')
Позже эта функция использовалась для более "извращенных" (полезных) вычислений, эта функция может получить в виде текста запрос и вернуть его результат, но естественно результат должен быть скалярным.
14 фев 14, 17:02    [15569476]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Сон Веры Павловны
Stanislav
Вообще это часть функции, которая вычисляет результат математического выражения, возможно ее проще чем-то заменить?

Кстати, если нужен калькулятор, со сервер сам себе неплохой калькулятор, и почему бы не использовать
declare
  @n int;
exec sp_executesql N'select @n=1+4*3/6', N'@n int out', @n out;


нельзя в select использовать
14 фев 14, 17:02    [15569481]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Stanislav
Изначально нужен был именно калькулятор и именно в функции. С этим справлялась функция, которая делала коннект к ms sql и его силами выполняла вычисления. При этом имеешь кучу полезных функций, все что есть в SQL.
т.е. функция принимала и вычисляла ('2+2*3+sin(3.14)')
Позже эта функция использовалась для более "извращенных" (полезных) вычислений, эта функция может получить в виде текста запрос и вернуть его результат, но естественно результат должен быть скалярным.


exec('select 2+2*3+sin(3.14)') at LOOPBACK


loopback - это линкед сервер к самому себе
14 фев 14, 17:06    [15569503]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Stanislav
нельзя в select использовать

А как вы SQLDMO использовали в select ?
14 фев 14, 17:12    [15569547]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Glory
exec('select 2+2*3+sin(3.14)') at LOOPBACK


loopback - это линкед сервер к самому себе


Не знал, она все равно не поможет т.к. в select нельзя использовать, но все равно спасибо.
Я уже написал CLR она в принципе решила мой вопрос.
14 фев 14, 17:17    [15569573]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Glory
Stanislav
нельзя в select использовать

А как вы SQLDMO использовали в select ?


Вот скалярная функция, я ее на sql.ru и нашел.

/****** Object:  UserDefinedFunction [dbo].[CalcStr]    Script Date: 14.02.2014 15:17:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER	FUNCTION	[dbo].[CalcStr]
(	@Command	varchar(8000)
)
RETURNS	float
AS
BEGIN

SELECT	@Command	= 'SELECT '+@Command

DECLARE	@len		int
SELECT	@len		= len( @Command )

DECLARE	@Server		sysname
SELECT	@Server		= @@SERVERNAME

DECLARE	@RetCode	int	,
	@SqlDmoObject	int	,
	@ResultObject	int

DECLARE	@Ret		float

--	Create Object
EXEC	@RetCode	= dbo.sp_OACreate
	'SQLDMO.SQLServer'		,
	@SqlDmoObject		OUT

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

--	Set Property for Connect
EXEC	@RetCode	= dbo.sp_OASetProperty
	@SqlDmoObject		,
	'LoginTimeout'		,
	10

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

EXEC	@RetCode	= dbo.sp_OASetProperty
	@SqlDmoObject		,
	'LoginSecure'		,
	'True'

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

--	Connect!
EXEC	@RetCode	= dbo.sp_OAMethod
	@SqlDmoObject		,
	'Connect'		,
	NULL			,
	@Server

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

--	Execute!
EXEC	@RetCode	= dbo.sp_OAMethod
	@SqlDmoObject			,
	'ExecuteWithResults'		,
	@ResultObject		OUT	,
	@Command			,
	@len

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

--	Get results
EXEC	@RetCode = sp_OAMethod
	@REsultObject			,
	'GetColumnFloat'			,
	@Ret			OUT	,
	1				,
	1

IF	@@ERROR <> 0
OR	@RetCode <> 0
	GOTO	ERROR_HANDLER

GOTO	DONE

ERROR_HANDLER: 

SELECT	@Ret		= NULL

DONE:
EXEC	dbo.sp_OADestroy
	@SqlDmoObject

RETURN	@Ret
END
14 фев 14, 17:20    [15569589]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Glory
Member

Откуда:
Сообщений: 104760
Stanislav
Вот скалярная функция, я ее на sql.ru и нашел.

Это по сути эмуляция CLR для sql2000
14 фев 14, 17:21    [15569595]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Тем более что вызов CLR быстрее чем вызов скалярки, как ни парадоксально.

Но на самом деле я не встречал задач где нужен калькулятор. А вот недопонимание задач и способов построение архитектуры - с лихвой.
16 фев 14, 07:37    [15573216]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Mnior
Тем более что вызов CLR быстрее чем вызов скалярки, как ни парадоксально.

Но на самом деле я не встречал задач где нужен калькулятор. А вот недопонимание задач и способов построение архитектуры - с лихвой.

Все просто. Например 1 из задач:
Есть металлургическое предприятие, которое льет легированную сталь, причем на заказ. Чтобы определить химический состав полученной стали делается рентгеноскопический анализ пробы (куска полученного слитка). Этот анализ делает прибор, который умеет записывать результаты в БД. Результаты хранятся в следующем виде - проба,хим.элемент,значение.
Заказчик когда заказывает марку стали, дает тех. требования, в этих требованиях есть пределы содержания хим. элементов в марке стали т.е. на каждый элемент минимум и максимум,которые сравнив с полученным результатом анализа, можно сказать получилась марка или нет. Но кроме обычных пределов он дает еще формулу, т.е. допустим 2 элемента в сумме не должно превышать предел, но это простая формула, а есть более сложные. Можно конечно сделать какой-то конструктор формул, с которым будет сложно работать простому человеку, далекому от программирования и при появлении в формулах новых функций сидеть его дорабатывать. А можно разрешить набирать формулу строкой. Решили сделать по 2-му способу.
Есть и другие задачи, думаю одной достаточно.
16 фев 14, 18:32    [15574251]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Stanislav
А можно разрешить набирать формулу строкой. Решили сделать по 2-му способу.
Для такого решения необязательно делать интерпретатор формул.

Можно, например, при вводе/редактировании формулы просто менять текст скалярной функции или вьюхи (второе даже будет намного производительнее)
16 фев 14, 22:12    [15574750]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 и smo  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
alexeyvg
при вводе/редактировании формулы просто менять текст скалярной функции или вьюхи
+100500
Или параметризованного представления (inline-function).

Stanislav
Есть и другие задачи, думаю одной достаточно.
А воз и ныне там.
17 фев 14, 00:13    [15574999]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить