Как получить значение выходного параметра в execute sp_executesql? - PullRequest
2 голосов
/ 07 октября 2011

Пожалуйста, прости невежество новичка!

Как мне получить значение выходного параметра в execute sp_executesql?

Я вижу вывод, но не могу его получить:

    DECLARE @LastActivity nvarchar(100)
    DECLARE @LastActivityDate datetime
    DECLARE @sql nvarchar(MAX)
    DECLARE @RowsToProcess  int 
    DECLARE @CurrentRow     int 
    DECLARE @SelectCol1     nvarchar(100)
    DECLARE @SelectCol2     nvarchar(100)
    DECLARE @SelectCol3     nvarchar(100)
    DECLARE @LastDate TABLE (RowID int not null primary key identity(1,1), col4 nvarchar(MAX), col5 sql_variant)
    DECLARE @table1 TABLE (RowID int not null primary key identity(1,1), col1 nvarchar(100),col2 nvarchar(100),col3 nvarchar(100))
    INSERT into @table1 (col1,col2,col3)(SELECT t.name AS col1, c.name AS col2, m.Field1 as col3 
                                         FROM sys.columns c INNER JOIN 
                                              sys.tables t ON c.object_id = t.object_id INNER JOIN 
                                              sys.schemas s ON t.schema_id = s.schema_id INNER JOIN 
                                              dbo.MERGE_TABLES m ON m.Table_Name=t.name
                                              WHERE c.name LIKE '%[_]DATE%' and m.[Enabled]='Y')  
    SET @RowsToProcess=@@ROWCOUNT 
    SET @CurrentRow=0 
    WHILE @CurrentRow<@RowsToProcess 
        BEGIN 
        SET @CurrentRow=@CurrentRow+1 
        SELECT @SelectCol1=col1,@SelectCol2=col2,@SelectCol3=col3 FROM @table1 WHERE RowID=@CurrentRow
            SET @sql='SELECT ' + '[dbo].[ConvertToDatetime](MAX(' + @SelectCol2 + '))' + ' FROM ' + @SelectCol1 + ' Where ' + @SelectCol3 + ' = ' + '''0722607QZ'''
        Declare @params as nvarchar(MAX)
        Set @params = '@date sql_variant output'
        Declare @date as sql_variant;
        execute sp_executesql 
                 @sql    
                ,@params 
                ,@date output
                       Select @date
        INSERT into @LastDate VALUES (@sql, @date) 
        end   
select col4,col5 from @LastDate

select col4, col5 из @LastDate дает мне SQL-скрипт в clo4, но col5 пуст!Мне нужно сохранить @date, так как мне все еще нужно получить Max (@date)

Thanx a миллионов.

SET @ sql = 'set @date = (' SELECT'+' [dbo]. [ConvertToDatetime] (MAX ('+ @ SelectCol2 +')) '+' FROM '+ @ SelectCol1 +' Where '+ @ SelectCol3 +' = '+' '' 0722607QZ '' ')'

вышеприведенный sql выдает ошибку: неверный синтаксис рядом с '.'

SET @ sql = 'set @date = (SELECT [dbo]. [ConvertToDatetime] (MAX (+ @ SelectCol2 +)) *
FROM @ SelectCol1 Где @ SelectCol3' '= 0722607QZ'')'

Приведенный выше sql выдает ошибку: необходимо объявить скалярную переменную "@ SelectCol2"

SET @sql='SELECT ' + @date + '=convert(nvarchar(100), [dbo].[ConvertToDatetime](MAX(' + @SelectCol2 + ')))' + ' FROM ' + @SelectCol1 + ' Where ' + @SelectCol3 + ' = ' + '''0722607QZ''' 

, приведенная выше выдает ошибку: неявное преобразование из данныхТип sql_variant для nvarchar не допускается.Используйте функцию CONVERT для выполнения этого запроса.

SET @sql='SELECT ' + @date + '=convert(nvarchar(MAX),(MAX(' + @SelectCol2 + '))' + ' FROM ' + @SelectCol1 + ' Where ' + @SelectCol3 + ' = ' + '''0722607QZ''' 

вышеописанное не вызывает ошибок, но все выходные данные равны NULL, нет значений.

1 Ответ

1 голос
/ 07 октября 2011

Ваш синтаксис выглядит нормально, но вы никогда не присваиваете выходной переменной @date, следовательно, никакого значения.

Вместо;

SET @sql='SELECT ...'

Вам нужно;

SET @sql='set @date = (SELECT ...'

Разве вы не можете использовать лучший тип, чем sql_variant?

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