|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Tuesday, August 02, 2011 2:56 PM
Points: 23,
Visits: 117
|
|
Hi, I have this piece of code written for SQL Server 2008. With all the limitations of SQLCE can anybody please help to rewrite this query? It is a basic update statement, which gets the value from a pre-query.
declare @tmp_RESIDENCE_LOCATION NVARCHAR(50)
SET @tmp_RESIDENCE_LOCATION = ((SELECT TOP(1) FOREIGN_RESIDENCE_LOCATION_CODE FROM FOREIGN_RESIDENCE_LOCATION WHERE COUNTRY_ID IN (SELECT HOST_COUNTRY_PLACE_ID FROM COST_PROJECTION CP WHERE CP.COST_PROJECTION_ID = 2) ) ORDER BY SORT_INDEX)
UPDATE JURISDICTION_COUNTRY_INPUT SET FOREIGN_RESIDENCE_LOCATION_CODE = @tmp_RESIDENCE_LOCATION WHERE COUNTRY_TYPE = 1 AND COST_PROJECTION_ID = 2
Thanks.
|
|
|
|
|
Old Hand
      
Group: General Forum Members
Last Login: Thursday, May 16, 2013 7:41 AM
Points: 365,
Visits: 2,900
|
|
| Will you be executing this code from a .Net application?
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Tuesday, August 02, 2011 2:56 PM
Points: 23,
Visits: 117
|
|
|
|
|
|
SSC-Dedicated
           
Group: General Forum Members
Last Login: Today @ 6:23 AM
Points: 32,903,
Visits: 26,784
|
|
akhandels (1/17/2011)
Hi, I have this piece of code written for SQL Server 2008. With all the limitations of SQLCE can anybody please help to rewrite this query? It is a basic update statement, which gets the value from a pre-query.
declare @tmp_RESIDENCE_LOCATION NVARCHAR(50)
SET @tmp_RESIDENCE_LOCATION = ((SELECT TOP(1) FOREIGN_RESIDENCE_LOCATION_CODE FROM FOREIGN_RESIDENCE_LOCATION WHERE COUNTRY_ID IN (SELECT HOST_COUNTRY_PLACE_ID FROM COST_PROJECTION CP WHERE CP.COST_PROJECTION_ID = 2) ) ORDER BY SORT_INDEX)
UPDATE JURISDICTION_COUNTRY_INPUT SET FOREIGN_RESIDENCE_LOCATION_CODE = @tmp_RESIDENCE_LOCATION WHERE COUNTRY_TYPE = 1 AND COST_PROJECTION_ID = 2
Thanks.
The only thing I see that may cause CE some heartburn is the SELECT TOP (1). I believe you'll need to change it to just SELECT TOP 1 (ie. without the parenthesis).
--Jeff Moden "RBAR is pronounced "ree-bar" and is a "Modenism" for "Row-By-Agonizing-Row".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
For better, quicker answers on T-SQL questions, click on the following... http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following... http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
|
|
|
|
|
Old Hand
      
Group: General Forum Members
Last Login: Thursday, May 16, 2013 7:41 AM
Points: 365,
Visits: 2,900
|
|
OK
We have two issues here. First, you can't use TSQL variables in SQL CE. Secondly, SQL CE processes single commands through a connection. So you need to do the following through your .NET application:
As I haven't got a copy of your database or schema to work against, the following is to demonstrate the principle of what you need to do. It is not tested or working code.
Firstly declare a recordset or datareader object and populate it with the result of the first query:
SELECT TOP 1 FOREIGN_RESIDENCE_LOCATION_CODE FROM FOREIGN_RESIDENCE_LOCATION WHERE COUNTRY_ID IN (SELECT HOST_COUNTRY_PLACE_ID FROM COST_PROJECTION CP WHERE CP.COST_PROJECTION_ID = 2) ) ORDER BY SORT_INDEX
With the value now in that object, you are ready for the next part of the query which can be executed as follows:
using (SqlCeConnection connect = new SqlCeConnection("Data Source=C:\[YourDataFileHere].sdf")) { connect.Open(); int location = [value from first aprt of the query]; int num = 0; using (SqlCeCommand command = new SqlCeCommand("UPDATE JURISDICTION_COUNTRY_INPUT SET FOREIGN_RESIDENCE_LOCATION_CODE = @tmp_RESIDENCE_LOCATION WHERE COUNTRY_TYPE = 1 AND COST_PROJECTION_ID = 2", connect)) { command.Parameters.Add("@tmp_RESIDENCE_LOCATION", SqlDbType.[Int or whatever datatype it is], location); command.ExecuteNonQuery(); } }
HTH
|
|
|
|