Click here to Skip to main content
15,891,951 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello Everybody,

I wrote sp using dynamic select Query. Sp compiled successfully, but while executing latitude and longitude values returning null..

The Stored Procedure is as follows:

SQL
ALTER PROCEDURE [dbo].[Usp_TrackVehicleDetails] 
	 
			@reg_Number     NVARCHAR(25)
	 
AS
BEGIN

    DECLARE	        @Imei_Number    NVARCHAR(25),
			@Imei_Table	NVARCHAR(MAX),
			@Latitude_Val	NVARCHAR(MAX),
			@Longitude_Val  NVARCHAR(MAX),
			@Imei_PK		INT,
			@dt				DATETIME
			
	 -- Tracking Device by means of Latitude and Longitude
	 
			SELECT @Imei_Number=Imei_No FROM MapDevice_Vehicle WHERE Vehicle_No=@reg_Number;
			
			SELECT @Imei_Table='Imei_'+@Imei_Number
			
			SET @Imei_PK=SCOPE_IDENTITY();
	 
			SET @Latitude_Val='SELECT Latitude FROM dbo.'+@Imei_Table+'WHERE Imei_Id='+CAST(@Imei_PK AS VARCHAR(50))
			
			SET @Longitude_Val='SELECT Longitude FROM dbo.'+@Imei_Table+'WHERE Imei_Id='+CAST(@Imei_PK AS VARCHAR(50))
			
			EXECUTE sp_executesql @Latitude_Val,@Longitude_Val; 
				
				   				   
		    BEGIN TRY
		    
				BEGIN TRANSACTION T1
				
	 -- Returning Values based on Vehicle_Number
	  
			SELECT ISNULL(@Latitude_Val,'')[latitude],
				   ISNULL(@Longitude_Val,'')[longitude],
				   ISNULL(@dt,GETDATE())[dateTime]
				
				IF @@ERROR!=0
				BEGIN
					ROLLBACK TRANSACTION T1
				END
				ELSE			
																									
				COMMIT TRANSACTION T1 
								
			END TRY
						
			BEGIN CATCH
				SELECT ERROR_MESSAGE() AS ErrMsg, ERROR_LINE() AS ErrLine,ERROR_PROCEDURE() AS ErrProc
			END CATCH
END
Posted
Updated 7-Feb-14 23:25pm
v3
Comments
abhijitmalkar 8-Feb-14 5:28am    
SET @Latitude_Val='SELECT Latitude FROM dbo.'+@Imei_Table+' WHERE Imei_Id= '+CAST(@Imei_PK AS VARCHAR(50))
SET @Longitude_Val='SELECT Longitude FROM dbo.'+@Imei_Table+' WHERE Imei_Id= '+CAST(@Imei_PK AS VARCHAR(50))
---------------------------- OR-------------------------------------------
SET @Latitude_Val='SELECT Latitude FROM dbo.'+@Imei_Table+' WHERE Imei_Id= '+CONVERT(VARCHAR(50),@Imei_PK)

SET @Longitude_Val='SELECT Longitude FROM dbo.'+@Imei_Table+' WHERE Imei_Id= '+CONVERT(VARCHAR(50),@Imei_PK)



THERE IS AT LEAST ONE SPACE IS REQUIRED WITH IN TABLE NAME AND WHERE CLAUSE
Member 10017719 8-Feb-14 5:53am    
Thank u abhijitmalkar but still its returning null for lat and long....

take care of syntax while generating dynamic query in sql
add space before where

SQL
SET @Latitude_Val='SELECT Latitude FROM dbo.'+@Imei_Table+' WHERE Imei_Id='+CAST(@Imei_PK AS VARCHAR(50))

            SET @Longitude_Val='SELECT Longitude FROM dbo.'+@Imei_Table+'  WHERE Imei_Id='+CAST(@Imei_PK AS VARCHAR(50))

print @Latitude_Val  -- check this value and try to run separately for validating.
print @Longitude_Val-- check this value and try to run separately for validating.
 
Share this answer
 
Comments
Member 10017719 8-Feb-14 5:38am    
Thank u so much karthik.But still its returning null
Karthik_Mahalingam 8-Feb-14 5:57am    
get the query from this print @Latitude_Val and try to run it..
if it is successfuly then the dynamic query is fine.. else it has some issue...
Karthik_Mahalingam 8-Feb-14 5:58am    
SELECT @Imei_Number= Top 1 Imei_No FROM MapDevice_Vehicle WHERE Vehicle_No=@reg_Number;
Member 10017719 8-Feb-14 6:08am    
I m getting Imei_Number Karthick.Thats no probs
Karthik_Mahalingam 8-Feb-14 6:11am    
exec ( @Latitude_Val)
exec (@Longitude_Val)
Imei_Id should be selected from table..

SQL
ELECT @Imei_Table='Imei_'+@Imei_Number

            SET @Imei_PK='SELECT(MAX(CAST(Imei_Id AS NVARCHAR(MAX)))) FROM dbo.'+@Imei_Table;
            SET @paramdefs = N'@Imei_PK nvarchar(255)';

            SELECT @LatLong_Val=N'SELECT Latitude,Longitude FROM dbo.'+@Imei_Table +' WHERE CAST(Imei_Id AS NVARCHAR(MAX))='+'('+@Imei_PK+')';
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900