Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

без sp_executeSQL не обойтись?   Найти похожие ветки 

 
interbase   (2008-12-24 16:13) [0]

Всем доброго времени суток!

есть процедурка(MS SQL Server 2005):

CREATE PROCEDURE aaa(@a VARCHAR(1000))
AS
BEGIN
 SELECT *
   FROM table
  WHERE id IN (@a)
END

вызов execute aaa "1,2,3,4"

так не работает... не ругается, но и не делает выборку. Без executeSQL никак?


 
Медвежонок Пятачок ©   (2008-12-24 16:19) [1]

where patindex(cast(id as varchar),@a) > x


 
Ega23 ©   (2008-12-24 16:22) [2]


> cast(id as varchar)


Я не знаю как в 2005, но я бы добавил cast(id as varchar(max))
В 2000 это воспринималось по-умолчанию как varchar(32)


 
Медвежонок Пятачок ©   (2008-12-24 16:22) [3]

ну да. там просто общая идея как наколоть судьбу


 
Johnmen ©   (2008-12-24 16:26) [4]


> Медвежонок Пятачок ©   (24.12.08 16:19) [1]

А что такое x?


 
Медвежонок Пятачок ©   (2008-12-24 16:27) [5]

это то, чего должно быть больше патиндекс.
если не найдено, то не помню что там вертается. ноль или минус один.


 
interbase   (2008-12-24 16:28) [6]


> Медвежонок Пятачок ©   (24.12.08 16:19) [1]

спасибки! Тока %-тами надо окружить.


 
Johnmen ©   (2008-12-24 16:29) [7]


> Медвежонок Пятачок ©   (24.12.08 16:27) [5]

Чему соответствует x в вопросе автора?
И как быть с id=7 и @a="33,77"?


 
Медвежонок Пятачок ©   (2008-12-24 16:29) [8]

лучше все айди не просто кастить а приклеивать слева справа загогулины.
для случая вроде такого
id = 1
@a = "11,12,12"


 
Медвежонок Пятачок ©   (2008-12-24 16:30) [9]

ну блин, сказал же что там просто идея.


 
sniknik ©   (2008-12-24 16:34) [10]

можно и не окружать, а использовать charindex вместо, но вот добавить в искомое запятую и ее же добавить к конце строки необходимо... иначе с такой например строкой "1,22,33,4" будут нежелательные результаты в виде 2, 3.


 
interbase   (2008-12-24 16:35) [11]


> Медвежонок Пятачок ©   (24.12.08 16:30) [9]

а как насчет идеи для:

declare @s varchar
set @s = "MySuperBase"
use @s
?
Очень надо!


 
sniknik ©   (2008-12-24 16:36) [12]

> приклеивать слева справа загогулины.
уже есть, запятая
where charindex(cast(id as varchar)+",",@a) > 0


 
sniknik ©   (2008-12-24 16:39) [13]

и кстати нужно две... обрамляющие, а то с одного конца тоже будут непонятности...


 
Johnmen ©   (2008-12-24 16:40) [14]


> sniknik ©   (24.12.08 16:36) [12]

id=7, @a="77,88"
?


 
Johnmen ©   (2008-12-24 16:43) [15]


> sniknik ©   (24.12.08 16:39) [13]

Остается надеяться, что не буде 4, 5,  6,   7
:)


 
interbase   (2008-12-24 16:46) [16]


> Johnmen ©   (24.12.08 16:40) [14]


> Johnmen ©   (24.12.08 16:43) [15]

ответь мне, о Вопрошающий и Надеющийся, на

> interbase   (24.12.08 16:35) [11]


 
Медвежонок Пятачок ©   (2008-12-24 16:48) [17]

в процедуре тебе сделать use один фик на дадут.
а на клиенте этого и не надо.


 
Johnmen ©   (2008-12-24 16:52) [18]


> interbase   (24.12.08 16:46) [16]

EXECUTE ("USE "+@s)


 
interbase   (2008-12-24 16:53) [19]


> Медвежонок Пятачок ©   (24.12.08 16:48) [17]

ага, ясно.
Просто есть несколько БД, идентичные по структуре, но с разными данными - почему так, вопрос не ко мне. Некоторую часть структуры можно было б вынести в отдельную БД, а данные брать из требуемой базы. Зело напрягает синхронизировать все в них:(.
Может ее(синхронизацию) автоматом можно как-то сделать?


 
Ega23 ©   (2008-12-24 16:56) [20]


> Может ее(синхронизацию) автоматом можно как-то сделать?


Как-то - можно. DTS тебе в помощь.


 
Медвежонок Пятачок ©   (2008-12-24 16:56) [21]

и что тебе даст юз?

следущая же строка после execute("use ...  ") в которой ты обратишся к объекту в той бд просто не скомпилится.


 
sniknik ©   (2008-12-24 16:59) [22]

> EXECUTE ("USE "+@s)
не получится, т.к. действие перехода будет только для сессии "внутри" данного EXECUTE

> а данные брать из требуемой базы.
бери...
base.dbo.table , зачем же переходить то, а если она под другим сервером, то -> openrowset/opendadasource.


 
Johnmen ©   (2008-12-24 17:02) [23]


> sniknik ©   (24.12.08 16:59) [22]

Да, я догадываюсь :)


 
interbase   (2008-12-24 17:02) [24]


> Johnmen ©   (24.12.08 16:52) [18]

не работает:(


> Ega23 ©   (24.12.08 16:56) [20]


> Как-то - можно. DTS тебе в помощь.


что за зверь?


 
interbase   (2008-12-24 17:05) [25]


> sniknik ©   (24.12.08 16:59) [22]


> бери...
> base.dbo.table , зачем же переходить то, а если она под
> другим сервером, то -> openrowset/opendadasource.

так мне надо то из одной, то из другой - одной и той же процедурой


 
sniknik ©   (2008-12-24 17:05) [26]

> не работает:(
вообщето работает, но только не так как тебе хочется
к примеру проверь (если есть база Northwind, нет сделай аналогично)
при коннекте к примеру к мастеру
EXECUTE ("USE Northwind  SELECT * FROM Categories")
все работает


 
interbase   (2008-12-24 17:07) [27]


> sniknik ©   (24.12.08 17:05) [26]

ну, я имел в виду не работате так, как мне надо.


 
sniknik ©   (2008-12-24 17:07) [28]

> так мне надо то из одной, то из другой - одной и той же процедурой
надо работать, но так хочется чуда... ;)


 
interbase   (2008-12-24 17:08) [29]


> sniknik ©   (24.12.08 17:07) [28]

телепатор от рождения или от посещения данного форума?:)


 
Ega23 ©   (2008-12-24 17:16) [30]


> ну, я имел в виду не работате так, как мне надо.


Вот негодяйка какая!



Страницы: 1 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
15-1254227405
istok20
2009-09-29 16:30
2009.11.29
WiMax...


2-1255072442
novai
2009-10-09 11:14
2009.11.29
Работа с указателями


15-1254256215
Юрий
2009-09-30 00:30
2009.11.29
С днем рождения ! 30 сентября 2009 среда


15-1254404923
Drowsy
2009-10-01 17:48
2009.11.29
Изменение файла..


11-1208300624
zldo
2008-04-16 03:03
2009.11.29
WaitForSingleObject