-
Всем доброго времени суток!
есть процедурка(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 никак?
-
where patindex(cast(id as varchar),@a) > x
-
> cast(id as varchar)
Я не знаю как в 2005, но я бы добавил cast(id as varchar(max))
В 2000 это воспринималось по-умолчанию как varchar(32)
-
ну да. там просто общая идея как наколоть судьбу
-
> Медвежонок Пятачок © (24.12.08 16:19) [1]
А что такое x?
-
это то, чего должно быть больше патиндекс.
если не найдено, то не помню что там вертается. ноль или минус один.
-
> Медвежонок Пятачок © (24.12.08 16:19) [1]
спасибки! Тока %-тами надо окружить.
-
> Медвежонок Пятачок © (24.12.08 16:27) [5]
Чему соответствует x в вопросе автора?
И как быть с id=7 и @a='33,77'?
-
лучше все айди не просто кастить а приклеивать слева справа загогулины.
для случая вроде такого
id = 1
@a = '11,12,12'
-
ну блин, сказал же что там просто идея.
-
можно и не окружать, а использовать charindex вместо, но вот добавить в искомое запятую и ее же добавить к конце строки необходимо... иначе с такой например строкой '1,22,33,4' будут нежелательные результаты в виде 2, 3.
-
> Медвежонок Пятачок © (24.12.08 16:30) [9]
а как насчет идеи для:
declare @s varchar
set @s = 'MySuperBase'
use @s
?
Очень надо!
-
> приклеивать слева справа загогулины.
уже есть, запятая
where charindex(cast(id as varchar)+',',@a) > 0
-
и кстати нужно две... обрамляющие, а то с одного конца тоже будут непонятности...
-
> sniknik © (24.12.08 16:36) [12]
id=7, @a='77,88'
?
-
> sniknik © (24.12.08 16:39) [13]
Остается надеяться, что не буде 4, 5, 6, 7
:)
-
> Johnmen © (24.12.08 16:40) [14]
> Johnmen © (24.12.08 16:43) [15]
ответь мне, о Вопрошающий и Надеющийся, на
> interbase (24.12.08 16:35) [11]
-
в процедуре тебе сделать use один фик на дадут.
а на клиенте этого и не надо.
-
> interbase (24.12.08 16:46) [16]
EXECUTE ('USE '+@s)
-
> Медвежонок Пятачок © (24.12.08 16:48) [17]
ага, ясно.
Просто есть несколько БД, идентичные по структуре, но с разными данными - почему так, вопрос не ко мне. Некоторую часть структуры можно было б вынести в отдельную БД, а данные брать из требуемой базы. Зело напрягает синхронизировать все в них:(.
Может ее(синхронизацию) автоматом можно как-то сделать?
-
> Может ее(синхронизацию) автоматом можно как-то сделать?
Как-то - можно. DTS тебе в помощь.
-
и что тебе даст юз?
следущая же строка после execute('use ... ') в которой ты обратишся к объекту в той бд просто не скомпилится.
-
> EXECUTE ('USE '+@s)
не получится, т.к. действие перехода будет только для сессии "внутри" данного EXECUTE
> а данные брать из требуемой базы.
бери...
base.dbo.table , зачем же переходить то, а если она под другим сервером, то -> openrowset/opendadasource.
-
> sniknik © (24.12.08 16:59) [22]
Да, я догадываюсь :)
-
> Johnmen © (24.12.08 16:52) [18]
не работает:(
> Ega23 © (24.12.08 16:56) [20]
> Как-то - можно. DTS тебе в помощь.
что за зверь?
-
> sniknik © (24.12.08 16:59) [22]
> бери...
> base.dbo.table , зачем же переходить то, а если она под
> другим сервером, то -> openrowset/opendadasource.
так мне надо то из одной, то из другой - одной и той же процедурой
-
> не работает:(
вообщето работает, но только не так как тебе хочется
к примеру проверь (если есть база Northwind, нет сделай аналогично)
при коннекте к примеру к мастеру
EXECUTE ('USE Northwind SELECT * FROM Categories')
все работает
-
> sniknik © (24.12.08 17:05) [26]
ну, я имел в виду не работате так, как мне надо.
-
> так мне надо то из одной, то из другой - одной и той же процедурой
надо работать, но так хочется чуда... ;)
-
> sniknik © (24.12.08 17:07) [28]
телепатор от рождения или от посещения данного форума?:)
-
> ну, я имел в виду не работате так, как мне надо.
Вот негодяйка какая!