Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Хранимая процедура exec sp_executesql


Автор: prostoia 28.4.2008, 09:50
Здрасти!
Кратенько о смысле задачи:

селектом я определяю айди записи где есть два параметра которые приходят из программы, 
два адреса а_адрес и о_адрес если таковой имеется то в s_id храним значение id этой строки,
и точно с таким же айди формируем запись в другой таблице и с другими входными параметрами, 
значения которых берутся из программы.

Ошибок не выдается не в программе, не SQl не ругается все кампилируется..., 
вот толька результата нет, я так чувствую это ошибка в exec sp_executesql.

Пожалуста знающие люди подскажите!!!!!!!!!!


...
ALTER PROCEDURE [dbo].[INSERT_HOUR_TABLE] 
    -- Add the parameters for the stored procedure here

        @A_ADDRESS varchar(max),
    @O_ADDRESS varchar(max),
    @VALUE real,
    @T datetime,
        @MilSec int,
    @Q int,
        @Type int,
    @nametabl varchar(max), --название таблицы приходит из программы
        @stnum varchar(max),
    @conf varchar(max),    --название таблицы2 приходит из программы
    @conf_id varchar(max) --название поля приходит из программы
    
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    DECLARE @s_id int
    DECLARE @s_id1 nvarchar(max)


SET @s_id1 = N'SELECT @s_id= ' + @conf_id +' from ' + @conf +' s  join SECTORS se on s.sector_id=se.sector_id WHERE se.A_ADDRESS= ''' + @A_ADDRESS + ''' AND s.O_ADDRESS= ''' + @O_ADDRESS + ''''
exec sp_executesql @s_id1, N'@s_id int out', @s_id  out


if @s_id is not NULL
begin


Declare @SQL nvarchar(max)


SET @SQL = N'INSERT INTO' + @nametabl+ '([TIMESTAMP],[MSEC],[VALUE],[QUALITY],[TREC],'+ @conf_id +')VALUES ('''+CONVERT(varchar, @T,120)+''',@MilSec,@VALUE,@Q, GETDATE(),@s_id)'
exec sp_executesql  @SQL, N'@T DATETIME, @MilSec INT, @VALUE FLOAT, @Q INT, @s_id INT', @T, @MilSec, @VALUE, @Q, @s_id-- с этой процедурой ошибка вероятно.




end
END

Автор: Magnifico 29.4.2008, 17:56
Код

SET @SQL = N'INSERT INTO' + @nametabl+ '([TIMESTAMP],[MSEC],[VALUE],[QUALITY],[TREC],'+ @conf_id +')VALUES ('''+CONVERT(varchar, @T,120)+''',@MilSec,@VALUE,@Q, GETDATE(),@s_id)'
exec sp_executesql  @SQL, N'@T DATETIME, @MilSec INT, @VALUE FLOAT, @Q INT, @s_id INT', @T, @MilSec, @VALUE, @Q, @s_id

 идет явная вставка в поле timestamp  что недопустимо , в sqlserevere timestamp никакого отношения 
к дате-времени не имеет.

полей в таблице 6 а параметров 5 (@T DATETIME, @MilSec INT, @VALUE FLOAT, @Q INT, @s_id INT')
пробелов пропущено после into   и перед values 

такой код отладки требует  - нужно давать скрипты всех таблиц участвующих в запросе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)