Здравствуйте!
Подскажите, пожалуйста, как составить динамический SQL запрос в MS SQL.
Вот я в хранимой процедуре хочу выполнить запрос которой содержиться в переменной типа стринг.
Я как-то делал такое в Oracle, но уже забыл...
там что-то кажется с immediate связано
Заранее благодарен!
Здравствуйте, 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
Здравствуйте, 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
Здравствуйте, deepsky, Вы писали:
D>Здравствуйте, Elena_, Вы писали:
E_>>Намного проще, чем в Oracle
D>Пример динамического SQL запроса в Оракле
[...Skipped...] D>Может Прекрасная Елена_ скажет чем он сложнее запроса в MSSQL?
Справедливости ради надо отметить, что такая лафа в Oracle была не всегда — только начиная с 8i. До этого приходилось использовать dbms_sql, что содержало в себе элементы танцев с бубном по сравнению с execute immediate.