2011-10-07 36 views
2

請原諒新手的無知!如何抓取執行sp_executesql中輸出參數的值?

如何獲取執行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 @[email protected]@ROWCOUNT 
    SET @CurrentRow=0 
    WHILE @CurrentRow<@RowsToProcess 
     BEGIN 
     SET @[email protected]+1 
     SELECT @SelectCol1=col1,@SelectCol2=col2,@SelectCol3=col3 FROM @table1 WHERE [email protected] 
      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 

選擇COL4,從@LastDate COL5給我的SQL腳本CLO4但COL5是空的!我需要存儲@date,因爲我仍然需要獲得最大值(@date)

超過一百萬。

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 Where @SelectCol3 ''=0722607QZ'') '

上面的SQL給出了錯誤:必須聲明標量變量 「@ SelectCol2」

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

the above produces the error : Implicit conversion from data type sql_variant to nvarchar is not allowed. Use the CONVERT function to run this query.

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

the above produces no error but all output is NULL, no values.

回答

1

你的語法看起來不錯,但你從來沒有分配給輸出變量@date因此沒有價值。

而不是;

SET @sql='SELECT ...' 

你需要;

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

難道你不能使用比sql_variant更好的類型嗎?

+0

你是一位非常善良的天才!但是,我收到一個錯誤:'。'附近的語法不正確。雖然。有任何想法嗎? – Fet

+0

去向? @sql的值是什麼樣的? –

+0

它不運行。我將它標記爲答案,因爲我確信它會修復它,但現在它給了我錯誤 – Fet