Динамический SQL запрос
От: yus Россия  
Дата: 21.10.03 20:32
Оценка:
Здравствуйте!
Подскажите, пожалуйста, как составить динамический SQL запрос в MS SQL.
Вот я в хранимой процедуре хочу выполнить запрос которой содержиться в переменной типа стринг.
Я как-то делал такое в Oracle, но уже забыл...
там что-то кажется с immediate связано
Заранее благодарен!
Re: Динамический SQL запрос
От: Elena_ Россия  
Дата: 21.10.03 20:54
Оценка: :)
Здравствуйте, yus, Вы писали:

yus>Здравствуйте!

yus> Подскажите, пожалуйста, как составить динамический SQL запрос в MS SQL.
yus> Вот я в хранимой процедуре хочу выполнить запрос которой содержиться в переменной типа стринг.
yus>Я как-то делал такое в Oracle, но уже забыл...
yus> там что-то кажется с immediate связано
yus> Заранее благодарен!

Например:

DECLARE @sSQL varchar(8000), @sCr char(1)
SET @sCR = char(13)

SET @sSQL = 'IF EXISTS (SELECT * FROM sysobjects' + @sCr +
'WHERE name = ''' + @namUsp + ''' AND ' +
'type = ''P'' AND ' +
'uid = ' + CONVERT(varchar(100), USER_ID()) + ')' + @sCr +
'DROP PROC ' + USER_NAME () + '.' + @namUsp

EXECUTE (@sSQL)

Если 8000 мало, то

EXECUTE (@sSQL1 + @sSQL2) и т.д.

Намного проще, чем в Oracle
Пользователь — друг программиста!
Re[2]: Динамический SQL запрос
От: deepsky Украина  
Дата: 22.10.03 07:02
Оценка: 5 (1)
Здравствуйте, Elena_, Вы писали:

yus>>Здравствуйте!

yus>> Подскажите, пожалуйста, как составить динамический SQL запрос в MS SQL.
yus>> Вот я в хранимой процедуре хочу выполнить запрос которой содержиться в переменной типа стринг.
yus>>Я как-то делал такое в Oracle, но уже забыл...
yus>> там что-то кажется с immediate связано
yus>> Заранее благодарен!
E_>Например:

E_>DECLARE @sSQL varchar(8000), @sCr char(1)

E_>SET @sCR = char(13)
E_>SET @sSQL = 'IF EXISTS (SELECT * FROM sysobjects' + @sCr +
E_> 'WHERE name = ''' + @namUsp + ''' AND ' +
E_> 'type = ''P'' AND ' +
E_> 'uid = ' + CONVERT(varchar(100), USER_ID()) + ')' + @sCr +
E_> 'DROP PROC ' + USER_NAME () + '.' + @namUsp
E_>EXECUTE (@sSQL)
E_>Если 8000 мало, то
E_>EXECUTE (@sSQL1 + @sSQL2) и т.д.
E_>Намного проще, чем в Oracle


Пример динамического SQL запроса в Оракле

DECLARE
sql_stmt VARCHAR2(200);
emp_id NUMBER(4) := 7566;
emp_rec emp%ROWTYPE;
BEGIN
sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
END;

Может Прекрасная Елена_ скажет чем он сложнее запроса в MSSQL?
Re[2]: Динамический SQL запрос
От: VVP Россия 67524421
Дата: 22.10.03 07:38
Оценка:
Здравствуйте, Elena_, Вы писали:

E_>Например:

E_>DECLARE @sSQL varchar(8000), @sCr char(1)
[skipped]
E_>EXECUTE (@sSQL1 + @sSQL2) и т.д.
Мда...
E_>Намного проще, чем в Oracle
Какая Вы, Елена, смешная
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
Re[3]: Динамический SQL запрос
От: LantY Россия icq:56949749
Дата: 22.10.03 08:06
Оценка: 1 (1)
Здравствуйте, deepsky, Вы писали:

E_>>DECLARE @sSQL varchar(8000), @sCr char(1)

E_>>SET @sCR = char(13)
E_>>SET @sSQL = 'IF EXISTS (SELECT * FROM sysobjects' + @sCr +
E_>> 'WHERE name = ''' + @namUsp + ''' AND ' +
E_>> 'type = ''P'' AND ' +
E_>> 'uid = ' + CONVERT(varchar(100), USER_ID()) + ')' + @sCr +
E_>> 'DROP PROC ' + USER_NAME () + '.' + @namUsp
E_>>EXECUTE (@sSQL)
E_>>Если 8000 мало, то
E_>>EXECUTE (@sSQL1 + @sSQL2) и т.д.
E_>>Намного проще, чем в Oracle

D>Может Прекрасная Елена_ скажет чем он сложнее запроса в MSSQL?

Ну в Оракле тоже можно писать левой ногой из-за правого плеча...
Я провда совершенно не въехал как можно вызывать USER_ID() и USER_NAME() без параметров, но тем не менее.
DECLARE @sSQL nvarchar(255)
DECLARE @pDef nvarchar(255)
SET @sSQL = N'IF EXISTS (SELECT * FROM sysobjects WHERE name = @namUsp AND type = ''P'' AND uid = USER_ID()) DROP PROC @namUsp'
SET @pDef = N'@namUsp nvarchar(50)'
EXECUTE  sp_executesql @sSQL, @pDef, @namUsp = @param
С уважением, Дмитрий.
Re[3]: Динамический SQL запрос
От: Sergey Ten http://www.fastalgo.com
Дата: 22.10.03 23:09
Оценка:
Здравствуйте, deepsky, Вы писали:

D>Здравствуйте, Elena_, Вы писали:


E_>>Намного проще, чем в Oracle

D>Пример динамического SQL запроса в Оракле

[...Skipped...]
D>Может Прекрасная Елена_ скажет чем он сложнее запроса в MSSQL?

Справедливости ради надо отметить, что такая лафа в Oracle была не всегда — только начиная с 8i. До этого приходилось использовать dbms_sql, что содержало в себе элементы танцев с бубном по сравнению с execute immediate.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.