Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
AxuliON,

С ними все в порядке.

Раньше было у меня вот так
exec ("
SELECT * FROM tab1
"+k+"

WHERE 1=1
")

И все работало.

Теперь мне посоветовали сделать вот так

exec sp_executesql N' SELECT * FROM tab1

'+@k+' теперь тут пишет неверный синтаксис

WHERE 1=1
27 май 13, 12:12    [14353331]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
Теперь мне посоветовали сделать вот так

Вам постоветовали использовать sp_executesql. А не просто заменить exec на sp_executesql
27 май 13, 12:13    [14353338]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
и второй вопрос

Я условие снизу написал вот так and (ct.task_date between @date1 and @date2)', N'@date1 datetime, @date2 datetime', @date1, @date2

все работает да.

Но как мне добавить еще одно условие
and (sp2.sales_person = @sales_person or @sales_person is null)

пробовал так, не получается.

N'and (sp2.sales_person = @sales_person or @sales_person is null), @sales_person int',@sales_person
27 май 13, 12:14    [14353352]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Вот я и спрашиваю как это сделать, я понимаю конечно что учить тяжело новичка такому методу.

Но вы же посоветовали учиться правильно.
27 май 13, 12:16    [14353364]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
Вот я и спрашиваю как это сделать,

Прочитать данные вам ссылки

wiktor591
Но вы же посоветовали учиться правильно.

Ну так учитесь
27 май 13, 12:19    [14353381]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Господа, ну зачем вы говорите глухому слова и показываете слепому код, пожалуйста не превращайте форум в песочницу для_только_что_узнавших_что_есть_на_свете_sql.
Что не тема - то песочница.
Зачем? Ну реально убиваете форум.
27 май 13, 12:19    [14353386]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
wiktor591,
Ну что за деццкий сад????
Вы BOL читали хоть?
Вот специально пример!
sp_executesql [ @statement = ] statement
[ 
    { , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' } 
     { , [ @param1 = ] 'value1' [ ,...n ] }
]


А вот как использовать
DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @max_title varchar(30);

SET @IntVariable = 197;
SET @SQLString = N'SELECT @max_titleOUT = max(JobTitle) 
   FROM AdventureWorks2008R2.HumanResources.Employee
   WHERE BusinessEntityID = @level';
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
SELECT @max_title;
27 май 13, 12:22    [14353400]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
По данным ссылкам я не нашел примера, как вставить текст.

так было проще
exec (" SELECT * FROM tab1

"@k"

")
27 май 13, 12:23    [14353405]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
По данным ссылкам я не нашел примера, как вставить текст.

Он еще и плохо видит
27 май 13, 12:23    [14353412]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Короче тема закрыта, ибо советовать, что то новое не всегда эффективно.
27 май 13, 12:25    [14353419]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
Короче тема закрыта, ибо советовать, что то новое не всегда эффективно.

Вынесите это эпиграфом к своему программному коду
27 май 13, 12:26    [14353424]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
wiktor591
Короче тема закрыта, ибо советовать, что то новое не всегда эффективно.

Стену - как решение предлагали?
Бросьте пытаться писать код - не дано... Ибо угробите что нибудь...
Слов нет. Кто из этого вырастет? Топ менеджер какой-нибудь... Ужос
27 май 13, 12:29    [14353446]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Glory,

так и сделаю...
27 май 13, 12:29    [14353448]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
wiktor591
Но как мне добавить еще одно условие
and (sp2.sales_person = @sales_person or @sales_person is null)

пробовал так, не получается.

N'and (sp2.sales_person = @sales_person or @sales_person is null), @sales_person int',@sales_person

Теперь так пробуйте:
declare
	@date1 datetime,
	@date2 datetime,
	@sales_person int

...

exec sp_executesql N'ОТЧЕТ
  and (ct.task_date between @date1 and @date2)
  and (sp2.sales_person = @sales_person or @sales_person is null)',
  N'@date1 datetime, @date2 datetime, @sales_person int', @date1, @date2, @sales_person
27 май 13, 12:31    [14353456]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Я спросил тут один всего лишь вопрос, а вы что посоветовали. Учись так делать. Да кому оно надо так писать?

Тоже самое когда выбираешь телефон. Купи то там функций больше да защита лучше. А кто сказал что по обычному хватит все сделать?

Какие SQL инъекции внутри компании? Начали тему типа учись новому так научи, ибо не пиши типа учись новому. Если хватает для выполнения этой задачи старой формы.
27 май 13, 12:34    [14353471]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Гость333,

Спасибо огромное.
27 май 13, 12:37    [14353488]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
Я спросил тут один всего лишь вопрос, а вы что посоветовали. Учись так делать. Да кому оно надо так писать?

Да никому не надо. Вам же не за качество кода платят.

wiktor591
Какие SQL инъекции внутри компании?

Такие же как вне ее.

wiktor591
Тоже самое когда выбираешь телефон. Купи то там функций больше да защита лучше. А кто сказал что по обычному хватит все сделать?

Наверное у вас до сих пор какая нидубь Nokia 3210 ? И это правильно.
27 май 13, 12:37    [14353493]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
wiktor591
Гость333,

Спасибо огромное.

Четвёртый параметр сумеете добавить? :-)
27 май 13, 12:39    [14353499]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Гость333,

Да я уже добавил все оставшиеся.
Спасибо огромное.

А про переменную @k, как добавить внутрь кода. Именно при таком запросе как правильно написать синтаксис.
27 май 13, 12:46    [14353549]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
wiktor591
А про переменную @k, как добавить внутрь кода. Именно при таком запросе как правильно написать синтаксис.

Учиться читать

"III.Особенности использования процедуры sp_executesql
1. Процедура НЕ поддерживает в качестве параметров конкатенацию строк и/или переменных.
2. Текст запроса должен быть либо переменной типа NVARCHAR/NCHAR, либо такого же типа стринговой константой.
3. Имеется возможность передачи параметров в выполняемый скрипт и получение выходных значений"
27 май 13, 12:49    [14353568]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
wiktor591
А про переменную @k, как добавить внутрь кода. Именно при таком запросе как правильно написать синтаксис.

Чему равна переменная @k?
27 май 13, 12:53    [14353591]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Гость333
wiktor591
А про переменную @k, как добавить внутрь кода. Именно при таком запросе как правильно написать синтаксис.

Чему равна переменная @k?


declare
@k varchar(500)

if  exists
(
SELECT tp3.[Уровень доступа] FROM #temp3 tp3 WHERE [Уровень доступа] like ('%1%'))
	set @k = 
'	
	join mbsII.dbo.COST_PROFIT_CENTER cpc (nolock)
		on sp.sale_channel = cpc.sale_channel
	join #temp3 tp3
		on tp3.cost_profit_center = cpc.cost_profit_center
'
	else 
	
if exists
(
SELECT tp3.[Уровень доступа] FROM #temp3 tp3 WHERE [Уровень доступа] like ('%2%'))
	set @k = 
'
	join #temp2 tp2
		on tp2.sales_person = c.sales_person	
'
	else 
	set @k = ''
27 май 13, 12:56    [14353608]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Предвижу следующую тему автора - Как мне использовать процедуру в запросе.
27 май 13, 12:59    [14353628]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
wiktor591,

Предварительно собираете текст запроса в переменную, и в sp_executesql используете эту переменную:
declare
	@date1 datetime,
	@date2 datetime,
	@sales_person int,
	@sql nvarchar(max)

...

set @sql = N'ОТЧЕТ ' + @k + N' WHERE 1=1 ' +
  N'and (ct.task_date between @date1 and @date2)
  and (sp2.sales_person = @sales_person or @sales_person is null)';

exec sp_executesql @sql,
  N'@date1 datetime, @date2 datetime, @sales_person int',
  @date1, @date2, @sales_person
27 май 13, 13:07    [14353699]     Ответить | Цитировать Сообщить модератору
 Re: SQL Динамический запрос.  [new]
wiktor591
Member

Откуда:
Сообщений: 282
Гость333,

Спасибо огромное буду все переносить.
27 май 13, 13:08    [14353718]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить