Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передача параметров хранимой процедуре  [new]
SqlUserRoles
Guest
Всем привет.

Есть некая хранимка, которая работает с датами
Так вот, под некоторыми пользователями она падает, например, вот такой вызов

exec as user = 'userB'
exec dbo.GetReports @data1='2014-01-20' ,@data2='2014-01-20',@All=1
revert


валится с ошибкой

Ошибка при преобразовании типа данных varchar к smalldatetime.


а под некоторыми юзерами, или админом, все проходит хорошо.

как показали тесты, проблема в формате данных, хотя в хранимке указан
SET DATEFORMAT ymd


Как поправить юзера, шоб под ним все работало?
20 фев 14, 16:18    [15599443]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
SqlUserRoles
Как поправить юзера, шоб под ним все работало?

default language его логина поправить
А еще лучше писать так

exec as user = 'userB'
exec dbo.GetReports @data1='20140120' ,@data2='20140120',@All=1
20 фев 14, 16:20    [15599470]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
SqlUserRoles
Guest
если не сложно, как поправить язык именно для логина?
В таблице master.sys.syslogins изменить language?
20 фев 14, 16:24    [15599539]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37057
SqlUserRoles
если не сложно, как поправить язык именно для логина?
В таблице master.sys.syslogins изменить language?
alter login или через GUI.
20 фев 14, 16:29    [15599599]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104760
SqlUserRoles
В таблице master.sys.syslogins изменить language?

Запомните, ничего не правится напрямую с системных таблицах
Можете это сделать в ГУИ на соотвентствующем объекте
Или написать команду ALTER LOGIN, если можете
20 фев 14, 16:29    [15599601]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
SqlUserRoles
Guest
Изменение языка не помогло
20 фев 14, 17:18    [15600115]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
SqlUserRoles
Изменение языка не помогло
Измените тип параметров на DATE
20 фев 14, 17:29    [15600222]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
Crimean
Member

Откуда:
Сообщений: 13148
если хранимка вызывается только снаружи и только так как указано, то вы сами себя обманули. параметры у вас должны быть типа char(), а уже внутри - явная конвертация с явным указанием типа преобразования (!) к smalldatetime
работали бы вы с параметризованными вызовами - было бы все хорошо
20 фев 14, 17:47    [15600361]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
o-o
Guest
SqlUserRoles
Изменение языка не помогло


поди не тому язык меняли.
надо логину, у к-ого валится запуск процедуры,
а не тому, к-ый соответствует юзеру userB (если он вообще с логином)

создаю процедуру :

create user dummy_user without login;

create proc dbo.p1 
	@data1 smalldatetime,
	@data2 smalldatetime
as
select @data1, @data2
;

grant execute on dbo.p1 to dummy_user


ее запускает логин db1_login с языком English:
execute as user = 'dummy_user'
exec dbo.p1 @data1='2014-01-20' ,@data2='2014-01-20'
-------------
(No column name)	(No column name)
2014-01-20 00:00:00	2014-01-20 00:00:00


а делаю ему
alter login db1_login with default_language=[русский]

db1_login переподключается
execute as user = 'dummy_user'
exec dbo.p1 @data1='2014-01-20' ,@data2='2014-01-20'

и сразу же Ваше:
Msg 8114, Level 16, State 5, Procedure p1, Line 0
Ошибка при преобразовании типа данных varchar к smalldatetime.
20 фев 14, 17:58    [15600458]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
it17
Member

Откуда:
Сообщений: 108
o-o,

выше писали
передавайте без дефисов
работает?
24 фев 14, 18:16    [15621558]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
o-o
Guest
it17,

сегодня че, 1-ое апреля?
это ТС передавал и передает с дефисами,
и ему было указано: не желаешь языковонезависимый формат даты использовать,
так меняй язык логинa на инглиш.
на что ТС ответил: смена языка не проканала.
я привожу контр-пример, где воспроизводится его ошибка при выставлении русского
дефолтным языком логину, и где НЕ ВЫЛАЗИТ эта ошибка, как только язык меняется на инглиш.
ибо смена языка -- тоже решение. работающее.
24 фев 14, 18:40    [15621728]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
SqlUserRoles
Guest
ребята, а как определить логин по известному User?
17 мар 14, 15:15    [15738934]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
SqlUserRoles
Guest
Так?

exec as user='userB'
SELECT     loginame
FROM         master.dbo.sysprocesses
WHERE     (spid = @@SPID)
revert
17 мар 14, 15:22    [15739017]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
o-o
it17,

сегодня че, 1-ое апреля?
это ТС передавал и передает с дефисами,
и ему было указано: не желаешь языковонезависимый формат даты использовать,
так меняй язык логинa на инглиш.
на что ТС ответил: смена языка не проканала.
я привожу контр-пример, где воспроизводится его ошибка при выставлении русского
дефолтным языком логину, и где НЕ ВЫЛАЗИТ эта ошибка, как только язык меняется на инглиш.
ибо смена языка -- тоже решение. работающее.
Или тип параметров менять на DATE
'YYYY-MM-DD' - для DATE стандартный формат, независящий от настроек сервера и сеанса.
17 мар 14, 15:31    [15739094]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров хранимой процедуре  [new]
o-o
Guest
SqlUserRoles
ребята, а как определить логин по известному User?

всю задачу расскажите.
а то постом ниже уже spid при чем-то...

имея юзера в базе, выполните в контексте той базы
select SUSER_SNAME(sid)
from sys.database_principals
where name = 'userB'

и получите сопоставленный логин.
если у юзера userB вообще есть логин.
17 мар 14, 15:45    [15739218]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить