| 
	
 | 
 Posted by Dan Guzman on 12/09/06 18:10 
> As you'd see, I have SET NOCOUNT ON  in the code. Has anyone 
> experienced this? Is this a known bug? This occurs in SQL Server 2000 
> running on Windows Server 2003. 
 
I haven't run into this before but I can see how PRINT statements in a  
transformation task could confuse DTS.  I did a little experimenting and  
found that DTS was fine as long as the PRINT statements ran after the SELECT  
statement that returned the proc result.  If you must have the debug  
functionality, consider saving the messages into local variables for  
printing after the result set is returned. 
 
Separately, I don't understand the purpose of the cursor here.  It seems  
tome that the entire body of the proc could be replace with the query below. 
 
SELECT 
    EmployeeID AS emp_id, 
    lastname 
FROM   Employees 
WHERE @cur = 1 
 
 
--  
Hope this helps. 
 
Dan Guzman 
SQL Server MVP 
 
"Bill_DBA" <bill8575_1998@yahoo.com> wrote in message  
news:1165592642.882620.279480@n67g2000cwd.googlegroups.com... 
>I have the following stored procedure that is called from the source of 
> a transformation in a DTS package. The first parameter turns on PRINT 
> debug messages. The second, when equals 1, turns on the openning, 
> fetching, and closing of a cursor. Things are fine if only one of the 
> two parameters was set to 1. 
> 
> When run with both parameters turned on, "dba_test_dts 1, 1", DTS 
> source (tab) preview fails because it thinks no row was returned. "No 
> rowset was returned from the SQL statement". Understanbly then the 
> transformation step would also fail with the "Invalid Pointer" error. 
> 
> As you'd see, I have SET NOCOUNT ON  in the code. Has anyone 
> experienced this? Is this a known bug? This occurs in SQL Server 2000 
> running on Windows Server 2003. 
> ----------------------------------------------------------------------------------------------------------------- 
> CREATE PROC dba_test_dts ( @debug BIT = NULL, @cur BIT = NULL ) 
> 
> AS 
> 
> -- Always have these 2 options set or unset so DTS would not error out 
> -- with the Invalid Pointers message. 
> 
> SET NOCOUNT ON 
> 
> SET ANSI_WARNINGS OFF 
> 
> DECLARE  @FMT_FILE_NAME        VARCHAR(256) 
> DECLARE  @OUTPUT_FILE_NAME     VARCHAR(256) 
> 
> DECLARE  @emp_id               INT 
> DECLARE  @lastname             VARCHAR(70) 
> 
> IF ( @debug = 1 ) 
> BEGIN 
>  PRINT '=== BEGIN ===' 
>  PRINT 'Stored Procedure dts_calling_stored_proc' 
>  PRINT 'Begin timestamp: ' + CONVERT(VARCHAR(32), CURRENT_TIMESTAMP, 
> 109 ) 
>  PRINT 'Server         : ' + @@SERVERNAME 
>  PRINT 'Host Name/ID   : ' + HOST_NAME() + '/' + CONVERT(VARCHAR(32), 
> HOST_ID()) 
>  PRINT 'Database       : ' + DB_NAME() 
>  PRINT 'User/NT User   : ''' + USER_NAME() + '''/''' + SYSTEM_USER + 
> '''' 
>  PRINT 'DEBUG FLAG     : ' + CONVERT( CHAR(1), @DEBUG ) 
>  PRINT '=== BEGIN ===' 
>  PRINT SPACE(1) 
> END 
> 
> IF ( EXISTS ( SELECT 1 FROM sysobjects WHERE 
> id=object_id(N'Employees_temp') ) ) 
>  DROP TABLE Employees_temp 
> 
> CREATE TABLE Employees_temp 
> ( 
>  emp_id            INTEGER 
> , lastname          VARCHAR(70) 
> ) 
> 
> INSERT INTO Employees_temp 
> ( 
>  [emp_id] 
> ,[lastname] 
> ) 
> SELECT EmployeeID 
>     , lastname 
> FROM   Employees 
> 
> IF ( @cur = 1 ) 
> BEGIN 
> 
>  DECLARE curEmp CURSOR FOR 
>   SELECT emp_id 
>        , lastname 
>     FROM Employees_temp 
> 
>  OPEN curEmp 
> 
>  FETCH NEXT FROM curEmp 
>   INTO 
>        @emp_id, @lastname 
> 
>  WHILE ( @@FETCH_STATUS = 0 ) 
>  BEGIN 
>    FETCH NEXT FROM curEmp 
>     INTO 
>        @emp_id, @lastname 
>  END 
> 
>  CLOSE curEmp 
>  DEALLOCATE curEmp 
> 
> END 
> 
> SELECT emp_id 
>     , lastname 
> FROM   Employees_temp 
> 
> GO 
>
 
  
Navigation:
[Reply to this message] 
 |