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

Откуда: Archangelsk, Russia
Сообщений: 32
Привет всем!!

Столкнулся с такой проблемой, при вызове следующей ХП

ALTER PROCEDURE dbo.GetAuthorization
(@comp varchar(150), @nick varchar(50))
AS
BEGIN
	Declare @depId integer
	Declare @sqlt nvarchar(350)
	Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username=' + @nick)
	exec sp_executesql @sqlt, N'@depId integer output', @depId output
END

получаю ошибку - неправильное имя столбца. Т.е.sql восринимает то что хранится в переменной @nick как название столбца. Понимаю, что нужны одинарные скобочки после Username= но скобки эти не ставятся. Я уже голову сломал как это сделать, может кто поможет!

Заранее спасибо!
1 авг 11, 23:46    [11056024]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
JohnyMotorhead
Member

Откуда: Archangelsk, Russia
Сообщений: 32
Короче в итоге пришел к такому решению, в Vusial Studio откуда обращаюсь к процедуре, к передаваемому аргументу @nick добавляю одинарные скобки, и все работает.
но мне для общего развития, как еще можно было поступить в данной ситуации??
1 авг 11, 23:55    [11056046]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
JohnyMotorhead
Короче в итоге пришел к такому решению, в Vusial Studio откуда обращаюсь к процедуре, к передаваемому аргументу @nick добавляю одинарные скобки, и все работает.
но мне для общего развития, как еще можно было поступить в данной ситуации??

прочитать до конца документацию по sp_executesql в части использования/передачи переменных?
1 авг 11, 23:57    [11056053]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
JohnyMotorhead
как еще можно было поступить в данной ситуации??


http://msdn.microsoft.com/ru-ru/library/ms176114.aspx
1 авг 11, 23:58    [11056055]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
locky
прочитать до конца документацию по sp_executesql в части использования/передачи переменных?


мда. не заметил. присоединяюсь.
1 авг 11, 23:58    [11056056]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
JohnyMotorhead
Member

Откуда: Archangelsk, Russia
Сообщений: 32
спасибо за отзывы!
2 авг 11, 00:03    [11056073]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8880
Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username=' + @nick)

переписатьна

Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username= ''' + @nick+''' ')

Где '' - это ДВА АПОСТРОФА.
Типа вот, наверное, так....
2 авг 11, 09:39    [11056627]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
SIMPLicity_
Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username=' + @nick)

переписатьна

Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username= ''' + @nick+''' ')

Где '' - это ДВА АПОСТРОФА.
Типа вот, наверное, так....
Написали-же, что не так.
2 авг 11, 09:41    [11056632]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8880
alexeyvg
SIMPLicity_
Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username=' + @nick)

переписатьна

Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username= ''' + @nick+''' '

Где '' - это ДВА АПОСТРОФА.
Типа вот, наверное, так....
Написали-же, что не так.




create table Employee 
(DeptId integer null,
 username varchar(50) null);
 
 insert into Employee
 select  1, 'Vas'
 union all
 select  1,'Pet'
 union all
 select  2,'Alex'
 union all
 select  2,'Vit';

GO

create PROCEDURE dbo.GetAuthorization (@comp varchar(150), @nick varchar(50))
AS
BEGIN
	Declare @depId integer
	Declare @sqlt nvarchar(350)
	Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Username=''' + @nick+''''
	exec sp_executesql @sqlt, N'@depId integer output', @depId output
	select @depId
END;

go

select * from  Employee;

go

exec GetAuthorization 'comp','vit';

go

exec GetAuthorization 'comp','vas';

go

drop procedure  dbo.GetAuthorization
drop table Employee 


Иля я чо-то недогнал?
2 авг 11, 09:58    [11056711]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
SIMPLicity_
Иля я чо-то недогнал?
Ага.
locky
прочитать до конца документацию по sp_executesql в части использования/передачи переменных?
Это проще, чем правильно переписать ваш код, да и текста меньше придётся набирать.

ЗЫ.
Хороший пример вызова:
exec GetAuthorization 'comp','vit''; drop database [моя база, на которую я никогда не делал бакапов, потому что пишу без ошибок] ''';
2 авг 11, 10:24    [11056855]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
alexeyvg
Это проще, чем правильно переписать ваш код, да и текста меньше придётся набирать.
К тому же правильный вариант и работать будет сильно быстрее (в разы).
2 авг 11, 10:25    [11056866]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
ilyaBS
Member

Откуда: Киев
Сообщений: 77
Может быть так получится?

[src]set @sqlt = 'set @depId = ''Select Employee.DeptId from Employee where Username=''' + @nick
2 авг 11, 10:41    [11056977]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
ilyaBS
Member

Откуда: Киев
Сообщений: 77
 set @sqlt = 'set @depId = ''Select Employee.DeptId from Employee where Username=''' + @nick
2 авг 11, 10:43    [11056995]     Ответить | Цитировать Сообщить модератору
 Re: Invalid Column Name  [new]
ilyaBS
Member

Откуда: Киев
Сообщений: 77
 
set @sqlt = 'set @depId = (Select Employee.DeptId from Employee where Username='+ @nick+')'

или так
2 авг 11, 10:47    [11057029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить