Showing posts with label converted. Show all posts
Showing posts with label converted. Show all posts

Friday, March 30, 2012

Order converted dates in union query

I have the following as part of a union query:

CONVERT(CHAR(8), r.RRDate, 1) AS [Date]

I also want to order by date but when I do that it doesn't order correctly because of the conversion to char data type (for example, it puts 6/15/05 before 9/22/04 because it only looks at the first number(s) and not the year). If I try to cast it back to smalldatetime in the order by clause it tells me that ORDER BY items must appear in the select list if the statement contains a UNION operator. I get the same message if I try putting just "r.RRDate" in the ORDER BY clause. It's not that big of a deal - I can lose the formatting on the date if I need to to get it to sort correctly, but this query gets used frequently and I'd like to keep the formatting if possible.

Thanks,

Dave

Do you really require UNION operator? If the results of each SELECT statement in the UNION is distinct then use UNION ALL. This will also provide better performance since it doesn't do the duplicate elimination step. And if you use UNION ALL then you can use the column name "r.RRDate" in the ORDER BY clause. If you need to use UNION then only way is to specify the column in the SELECT list also if you want it in the ORDER BY clause. Lastly, is there any reason for your to format the date in the query itself. It is usually unnecessary work to do this on the server-side. It is best to send the date value as is and format on the client. Alternatively, you can use a style which is universal and will preserve sorting for example like the ISO unseparated date format (style 112: YYYYMMDD) or ISO 8601 datetime format (style 126: YYYY-MM-DDThh:mm:ss.nnn). Using language dependent style format is always confusing and can cause errors when you try to use it as is in a different system that has a different language setting for example.

Monday, March 12, 2012

Oracle to Sql Server conversion

Something went a bit wrong. Converted Oracle 10g to Sql Server 2000.
Now, in the schema there is a column that allows nulls.
In Oracle if you look at the column, you see NULL.
However if I look at the same created in Sql Server it actually does not have a <NULL> value there.
When the conversion was done however, all of these NULLs from Oracle came across into Sql Server with the actual value of <NULL>.
This causes the problem that these objects are now no longer displayed within my application. They show up fine using Oracle, and if I use Sql Server from the start it is fine -- the column is just blank, not acutally NULL. I can force the <NULL> value by doing the ctrl+0 on the field, and that breaks it as well.

The column has to allow nulls, but the actual value cannot be <NULL> (in Sql Server). Any suggestions on getting rid of the NULL - I could do an update, but it actually just has to be blank rather than having a value. I tried an update to set it to ' ' but that didn't really work - here was my statement:
update [table] set [columnname] = '' where [columnname] = '<NULL>'

Any other suggestions besides try again? But if it has to be 'try the conversion again' then that's the answer.
Thanks muchupdate [table] set [columnname] = NULL where [columnname] = '<NULL>'

Oracle To SQL

I have an oracle procedure that needs to be converted to ms-sql.

lXMLContext := DBMS_XMLQuery.newContext("select * from table");
-- Setup parameters on how XML is to be constructed.
DBMS_XMLQuery.useNullAttributeIndicator(lXMLContex t,FALSE);
DBMS_XMLQuery.setRaiseNoRowsException(lXMLContext, FALSE);
DBMS_XMLQuery.setRaiseException(lXMLContext,TRUE);
DBMS_XMLQuery.propagateOriginalException(lXMLConte xt,TRUE);
DBMS_XMLQuery.setRowTag(lXMLContext,lWS.wsXMLRecor d.wsViewName);
DBMS_XMLQuery.setDateFormat(lXMLContext,lDateMask) ;

Any one can help in constructing a similar pattern in ms-SQL or atleast tell me what is all these doing?

I am coding this using extended stored procedure in c#.

Thanks,
Venkat.Go thru the below link and see if u get any help...

http://www.experts-exchange.com/Databases/Oracle/Q_21185214.html

Here what i could understand is..

It created the object 'lXMLContext' & set the parameters for this object for creating XML... U just need to concentrate on the last 2 only here I think so 'setRowTag' & 'setDateFormat'... the first 2 is set as 'FALSE' so u need not have to bother... the 3rd & 4th I feel its some sort of exception feature in ORACLE... to intimate the user that an error has occured while creating the XML...

:D Sorry if u could already understand this much and was asking asking for anything more....

lXMLContext := DBMS_XMLQuery.newContext("select * from table");

-- Setup parameters on how XML is to be constructed.

DBMS_XMLQuery.useNullAttributeIndicator(lXMLContex t,FALSE);
DBMS_XMLQuery.setRaiseNoRowsException(lXMLContext, FALSE);
DBMS_XMLQuery.setRaiseException(lXMLContext,TRUE);
DBMS_XMLQuery.propagateOriginalException(lXMLConte xt,TRUE);
DBMS_XMLQuery.setRowTag(lXMLContext,lWS.wsXMLRecor d.wsViewName);
DBMS_XMLQuery.setDateFormat(lXMLContext,lDateMask) ;