Конференция "Базы" » без sp_executeSQL не обойтись? [D7, MSSQL]
 
  • interbase (24.12.08 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 никак?
  • Медвежонок Пятачок © (24.12.08 16:19) [1]
    where patindex(cast(id as varchar),@a) > x
  • Ega23 © (24.12.08 16:22) [2]

    > cast(id as varchar)


    Я не знаю как в 2005, но я бы добавил cast(id as varchar(max))
    В 2000 это воспринималось по-умолчанию как varchar(32)
  • Медвежонок Пятачок © (24.12.08 16:22) [3]
    ну да. там просто общая идея как наколоть судьбу
  • Johnmen © (24.12.08 16:26) [4]

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

    А что такое x?
  • Медвежонок Пятачок © (24.12.08 16:27) [5]
    это то, чего должно быть больше патиндекс.
    если не найдено, то не помню что там вертается. ноль или минус один.
  • interbase (24.12.08 16:28) [6]

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

    спасибки! Тока %-тами надо окружить.
  • Johnmen © (24.12.08 16:29) [7]

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

    Чему соответствует x в вопросе автора?
    И как быть с id=7 и @a='33,77'?
  • Медвежонок Пятачок © (24.12.08 16:29) [8]
    лучше все айди не просто кастить а приклеивать слева справа загогулины.
    для случая вроде такого
    id = 1
    @a = '11,12,12'
  • Медвежонок Пятачок © (24.12.08 16:30) [9]
    ну блин, сказал же что там просто идея.
  • sniknik © (24.12.08 16:34) [10]
    можно и не окружать, а использовать charindex вместо, но вот добавить в искомое запятую и ее же добавить к конце строки необходимо... иначе с такой например строкой '1,22,33,4' будут нежелательные результаты в виде 2, 3.
  • interbase (24.12.08 16:35) [11]

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

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

    declare @s varchar
    set @s = 'MySuperBase'
    use @s
    ?
    Очень надо!
  • sniknik © (24.12.08 16:36) [12]
    > приклеивать слева справа загогулины.
    уже есть, запятая
    where charindex(cast(id as varchar)+',',@a) > 0
  • sniknik © (24.12.08 16:39) [13]
    и кстати нужно две... обрамляющие, а то с одного конца тоже будут непонятности...
  • Johnmen © (24.12.08 16:40) [14]

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

    id=7, @a='77,88'
    ?
  • Johnmen © (24.12.08 16:43) [15]

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

    Остается надеяться, что не буде 4, 5,  6,   7
    :)
  • interbase (24.12.08 16:46) [16]

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


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

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

    > interbase   (24.12.08 16:35) [11]
  • Медвежонок Пятачок © (24.12.08 16:48) [17]
    в процедуре тебе сделать use один фик на дадут.
    а на клиенте этого и не надо.
  • Johnmen © (24.12.08 16:52) [18]

    > interbase   (24.12.08 16:46) [16]

    EXECUTE ('USE '+@s)
  • interbase (24.12.08 16:53) [19]

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

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

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


    Как-то - можно. DTS тебе в помощь.
  • Медвежонок Пятачок © (24.12.08 16:56) [21]
    и что тебе даст юз?

    следущая же строка после execute('use ...  ') в которой ты обратишся к объекту в той бд просто не скомпилится.
  • sniknik © (24.12.08 16:59) [22]
    > EXECUTE ('USE '+@s)
    не получится, т.к. действие перехода будет только для сессии "внутри" данного EXECUTE

    > а данные брать из требуемой базы.
    бери...
    base.dbo.table , зачем же переходить то, а если она под другим сервером, то -> openrowset/opendadasource.
  • Johnmen © (24.12.08 17:02) [23]

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

    Да, я догадываюсь :)
  • interbase (24.12.08 17:02) [24]

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

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


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


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


    что за зверь?
  • interbase (24.12.08 17:05) [25]

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


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

    так мне надо то из одной, то из другой - одной и той же процедурой
  • sniknik © (24.12.08 17:05) [26]
    > не работает:(
    вообщето работает, но только не так как тебе хочется
    к примеру проверь (если есть база Northwind, нет сделай аналогично)
    при коннекте к примеру к мастеру
    EXECUTE ('USE Northwind  SELECT * FROM Categories')
    все работает
  • interbase (24.12.08 17:07) [27]

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

    ну, я имел в виду не работате так, как мне надо.
  • sniknik © (24.12.08 17:07) [28]
    > так мне надо то из одной, то из другой - одной и той же процедурой
    надо работать, но так хочется чуда... ;)
  • interbase (24.12.08 17:08) [29]

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

    телепатор от рождения или от посещения данного форума?:)
  • Ega23 © (24.12.08 17:16) [30]

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


    Вот негодяйка какая!
 
Конференция "Базы" » без sp_executeSQL не обойтись? [D7, MSSQL]
Есть новые Нет новых   [134477   +39][b:0][p:0.001]