Ошибка в динамической команде SQL, которая использует оператор вставки с помощью оператора Select - PullRequest
0 голосов
/ 26 апреля 2011

Я использую эту процедуру, чтобы выбрать значения из разных таблиц (каждую неделю в каждой таблице) и вставить их в одну временную таблицу и получить их в качестве выходных данных, выбрав таблицу в конце процедуры ...

CREATE proc salessample (@tablename varchar(50), @did varchar(50))      
as      
begin      
   create table #salesdetail(sno int identity, This_Week_Left float,
                             This_Week_Right float, Last_Week_Left float, 
                             Last_Week_Right float, Paid_Left float,
                             Paid_Right float, Paid float, orbitrate float)      

DECLARE @SQLString NVARCHAR(500), @i int;
DECLARE @SQLString2 NVARCHAR(500);      

set @i=1      

--while(@i < 2)      
--begin      

set @SQLString = N'insert into #salesdetail(This_Week_Left,This_Week_Right,Last_Week_Left,Last_Week_Right,Paid_Left,Paid_Right,Paid,orbitrate) select a.This_Week_Left,a.This_Week_Right,a.Last_Week_Left,a.Last_Week_Right,a.Paid_Left,a.Paid_Right,a.Paid,b.orbitrate from Power.Week_'+@tablename +'_table a, Power.Orbit_Rates b where a.m_distributor_id ='+@did+' and b.week_details ='+convert(numeric(18),@tablename);      

exec  sp_executesql @SQLString      

set @i =@i + 1      

--end      

select * from #salesdetail      

end 

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Какое сообщение об ошибке вы получаете. На ваш вопрос невозможно ответить в его нынешнем виде.

Насколько я понимаю, это может быть одной из следующих потенциальных проблем:

  1. разговоров между юникодом (nvarchar) и не-юникодом (varchar)
  2. Преобразование в число и добавление к строке:

    ... and b.week_details ='+convert(numeric(18),@tablename);

  3. Преобразование в числовое значение (18)
  4. Некоторые другие ошибки вставки, которые я не вижу

Разбейте динамический оператор SQL на части и просмотрите его, прежде чем пытаться exec его. То есть print или select строка. Вы можете скопировать его и запустить автономно, чтобы увидеть, есть ли какие-либо проблемы.

EDIT

Из вашего комментария ниже я вижу, что ваша проблема в том, что вы конвертируете строку в число, а затем пытаетесь добавить ее в строку. Попробуйте вместо этого:

... and b.week_details ='+ @tablename
0 голосов
/ 28 апреля 2011

Спасибо тебе всем ...... За все ответы и комментарии .....

Я очищен Моя ошибка ..

Я забыл дать одинарные кавычки для данных условия where в команде Dyanmic ...

вот так ....

'' 'Text' '' = 'Text' ....

причина, по которой я получил ошибку, заключалась в том, что она принимает параметр и выполняет процедуру. но не для всех значений. Я дал имя таблицы в качестве ввода.

Теперь оно работает. Спасибо еще раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...