Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet
Lots of questions come up in the SQL Team forums about conversions between Access and T-SQL and some of the differences between the two SQL dialects. Here's a few handy things to help you out with converting your projects. Check in now and then as this short list will eventually grow as more things come up.
Converting NULL values
Access: NZ(Value, ValueToReturnIfNull)
T-SQL: COALESCE(Value, ValueToReturnIfNull) – or – ISNULL(Value, ValueToReturnIfNull)
Checking for NULLs
Access: WHERE Value IS NULL – or – WHERE ISNULL(Value) (note the difference from T-SQL's ISNULL)
T-SQL: WHERE Value IS NULL
String Segments
Access: MID(StringVal, StartPos, [length] ) (length is optional)
T-SQL: SUBSTRING(StringVal, StartPos, length ) (length is required!)
Finding a String within a String
Access: SELECT INSTR(start, StringToSearch, StringToFind)
T-SQL: SELECT CHARINDEX(start, StringToSearch, StringToFind)
Reverse a String
Access: SELECT STRREVERSE(StringVal)
T-SQL: SELECT REVERSE(StringVal)
Convert a String to Uppercase or Lowercase
Access: SELECT UCASE(StringVal), LCASE(StringVal)
T-SQL: SELECT UPPER(StringVal), LOWER(StringVal)
Formatting Dates, Booleans, Numerics as Strings
Access: SELECT Format(Value, FormatSpecification) (note: this always returns a string value)
T-SQL: Do not do this in T-SQL; format data at your front-end application or report
String Literals
Access: SELECT "This is a string"
T-SQL: SELECT 'This is a string'
LIKE pattern matching
matching multiple characters:
Access: WHERE Column LIKE "string"
T-SQL: WHERE Column LIKE '%string%'
matching a single character:
Access: WHERE Column LIKE "?string?"
T-SQL: WHERE Column LIKE 'string'
not matching a character or range:
Access: WHERE Column LIKE "[!a-z]"
T-SQL: WHERE Column LIKE '[^a-z]'
Triming White Space
Access: TRIM(val)
T-SQL: RTRIM(LTRIM(val))
Converting DataTypes
Access: CINT(value), CDBL(value), CDEC(value), CSTR(value), CDATE(value), CBOOL(value)
T-SQL: CONVERT(DATATYPE, value) – or – CAST(value AS datatype)
Conditional Expressions
Access: IIF(Condition, ReturnIfTrue, ReturnIfValue)
T-SQL: CASE WHEN Condition THEN ReturnIfTrue ELSE ReturnIfFalse END
Working with Date Literals
Access: WHERE SomeDate = #1/1/2005#
T-SQL: WHERE SomeDate = '1/1/2005' (this is an implicit conversion from a string to a date)
Creating new Dates
Access: DATESERIAL(year,month,date)
T-SQL: Use the Date() function here – there is no quick easy way to do this in T-SQL
Creating new Times
Access: TIMESERIAL(Hour, minute, second)
T-SQL: Use the Time() function here – there is no quick easy way to do this in T-SQL
Getting Today's Date and Time
Access: SELECT now()
T-SQL: SELECT getdate()
Getting Today's Date only (i.e., at midnight)
Access: SELECT date()
T-SQL: Use the DateOnly() function here : SELECT dbo.DateOnly(getdate())
Getting Today's Time Only (at the "base" date, or date with a numeric value of 0)
Access: SELECT Time() (this returns the time at 12/30/1899)
T-SQL: Use the TimeOnly() function here : SELECT dbo.TimeOnly(getdate()) (returns the time at 1/1/1900)
Boolean (True/False) Values
Access: WHERE Active = True – and – WHERE Active = False
(Active is a Boolean datatype)
T-SQL: WHERE Active=1 – and – WHERE Active=0
(Active is a Bit datatype)
Returning or Setting Boolean Values
Access: SELECT BooleanExpression
T-SQL: CAST(CASE WHEN BooleanExpression THEN 1 ELSE 0 END) AS BIT
FULL OUTER JOINS
(Note: try to avoid these as a general practice)
Access: SELECT … FROM tableA LEFT OUTER JOIN tableB ON …
UNION ALL
SELECT … FROM tableB LEFT OUTER JOIN tableA ON … WHERE tableA .PK IS NULL
T-SQL: SELECT … FROM tableA FULL OUTER JOIN tableB ON ….
RIGHT OUTER JOINS
Because we all know that using the query designer in Access sometimes results in these, but we should never use them in manually written and maintained SQL:
Access: SELECT … FROM tableA RIGHT OUTER JOIN tableB ON ….
T-SQL: SELECT … FROM tableB LEFT OUTER JOIN tableA ON ….
Parameters
Access: SELECT [Any column name not defined]
T-SQL: SELECT @ParamName
Modulo Operator
Access: SELECT value1 MOD value2
T-SQL: SELECT value1 % value2
Dividing Integers to calculate a Percentage or other result with decimal places
Access: SELECT Int1 / Int2 (this returns a Double value implicitly)
T-SQL: SELECT Int1 * 1.0 / Int2 (the multiplication by 1.0 results in a numeric(8,6) being returned)
String Concatenation Operator
Access: Val1 & Val2 (both will be implicitly converted to strings if they are not already)
T-SQL: Val1 + Val2 ( note that explicit conversion to a "string" datatypes is necessary in T-SQL)
Referencing an Expression in a SELECT
Here, we define A+B as a new column X, and we want to reference X in the SELECT:
Access: SELECT A+B as X, X+C as D FROM …
T-SQL: SELECT X, X+C as D FROM (SELECT A+B as X, C FROM … ) tmp
Getting a Character from an ASCII code
Access: SELECT CHR(AsciiCode)
T-SQL: SELECT CHAR(AsciiCode)
Getting an ASCII code from a Character
Access: SELECT ASC(Character)
T-SQL: SELECT ASCII(Character)
Date Part Indicators (DateAdd, DateDiff, DatePart)
MS Access and SQL Server both use the same basic date functions (DateAdd, DateDiff, DatePart) but the way you indicate which "date part" you are after differs between the two.
MS Access uses a string expression to indicate the "dart part" in DateAdd, DatePart and DateDiff expressions; SQL Server uses symbols. Thus, you need to put quotes around the part name in MS Access since it is just a string expression, but you should NOT use quotes in SQL Server – just enter the value directly.
The Date Part indicators are listed below:
Date Part | SQL Server | MS Access |
Year | year, yy, yyyy | "yyyy" |
Quarter | quarter, qq, q | "q" |
Month | month, mm, m | "m" |
Day of Year | dayofyear, dy, y | "y" |
Day | day, dd, d | "d" |
Week | week, wk, ww | "ww" |
Day of Week | weekday, dw | "w" |
Hour | hour, hh | "h" |
Minute | minute, mi, n | "n" |
Second | second, ss, s | "s" |
Millisecond | millisecond, ms | - |
Finally, note that both Access and T-SQL support the Year(), Month() and Day() functions.
Legacy Comments
Tim Mitchell
2007-04-02 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Good information - thanks for posting. |
Jem
2007-04-03 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Cheatsheet One major feature of Jet SQL lacking in T-SQL is PIVOT (crosstab) queries. I think I saw somewhere a PIVOT clause in T-SQL but the resulting column values had to be declared explicitly, thus nullifying a big part of the interest of PIVOT queries. Otherwise, this can be emulated with a procstock and dynamic SQL. |
Jeff
2007-04-03 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Hi Jem -- that's a good point, I will add something about PIVOT tables when I think of the best way to incorporate it. SQL Server 2005 does include a PIVOT operator, but as you mention, you must explicitly list the columns out. Which is actually a good thing -- your database layer should only produce resultsets with known column names and datatypes. Dynamically creating columns at your database layer in general isn't a good idea. Even in Access, the dynamic columns that are generated with a PIVOT operator are very difficult to work with, since you cannot bind reports or forms to those column names that are changing. |
Jem
2007-04-04 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Well, I'm not a big fan of hardwiring reports (especially with data-dependent columns) to datasets in general. For example, I had to deal with an application managing server stocks. So I had a "Platform" table containing values such as "AS 400","I386","SUN". One typical need was to provide the spreadsheet of servers allocated by customer (rows) and by platform (columns). So if the user was to add a new platform (and the application permitted him to do it via the client), I would have had to modify code and/or reports to hardwire the new value, compile and deploy the application. I guess this kind of scenario can be addressed by Reporting Services, but it would have been a bit overkill for a mere two or three dynamic reports. Another scenario where you cannot (and do not wish to) know at design time the columns returned by a query is the user defined query, designed via an Access-like interface. |
Ashvin
2007-04-09 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide sir can you please help to to select a field name, which ends with a particular word... i.e.i have to find field name ending with my predefined charater search. |
Ashvin
2007-04-09 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide explaining the above thread what i mean is that, i would like to have the names of all employees whose name ends with 'kumar'...how should i design the query for the above criteria |
Jeff
2007-04-09 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Go To wwww.sqlteam.com/forums , sign up for an account, and ask your question there under the appropriate forums (Access or SQL Server). |
Stephen
2007-04-20 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide I have need Microsoft Access some Query follows the query style; Trim Proper Upper Count Update sum of Criteria |
Jeff
2007-04-20 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Stepen -- this is just a quick reference guide. If you don't know how to program in either T-SQL or MS Access, then this is not the place to be. You should start with some good books and/or tutorials designed for beginners. On a side note, I did just add the functions to convert lower/uppercase since they are different in T-SQL and JET SQL, so thanks for bringing that up. |
Himanshu Kumar Pant
2007-04-27 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide I need more information about T-SQL and jet-SQL. Thanks for this nice help. My best regards with you |
Kim
2007-05-03 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Thank you! |
Dean
2007-05-11 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide So regarding the difference in the datepart used in dateadd, datediff etc. Is there anyway to get around this? I mean datepart is a string in access / vb so I have used a variable in this place rather than explicitly defining which datepart. so just changing to a symbol does not help. Anyone know a nice way to do this. (short of having to make a .net / managed stored procedure instead of a straight t-sql one? Thanks |
Jeff
2007-05-11 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide you just use case. Something like this: case when datepart="m" then datepart(month, somedate) when datepart="y" then datepart(year, somedate) when datepart="d" then datepart(day, somedate) end |
Dean
2007-05-12 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Thanks Jeff, I know. I was using it as a condition for a while loop. like; WHILE DateDiff(@Interval, @IndexDate, @EndDate) >=0 Its just going to make the whole thing a bit messy. boo hoo for me ;-) |
Harold Moorhead
2007-06-26 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Hi, I have an Access Query that I am trying to convert to SQL. I will past the Access Query and then what I am trying in SQL. Obviously it is not parsing correctly, so any help would be appreciated. Access query: SELECT Trim(Left(CLIENTS.NAME,InStr(1,CLIENTS.NAME,',')-1 )) AS LASTNAME, Trim(Mid(CLIENTS.NAME,InStr(1,CLIENTS.NAME,',')+1)) AS FIRSTNAME, CLIENTS.NAME, CLIENTS.REFNUM AS [NUMBER], CLIENTS.BADDR2, CLIENTS.BADDR3, CLIENTS.BADDR4, CLIENTS.BADDR5, CLIENTS.PHONE1, "" AS EXT1, CLIENTS.PHONE2, "" AS EXT2, CLIENTS.FAXNUM, "" AS EXT3, CLIENTS.EMAIL, CLIENTS.TERMS, CLIENTS.TAXABLE INTO AlmostFinishedClientTable FROM CLIENTS; SQL query: SELECT RTrim(LTrim(CLIENTS.NAME,CharIndex(',',Client.Name,1)-1)) AS LASTNAME, RTrim(LTrim(SubString(CLIENTS.NAME,CharIndex(',',Clients.Name,1)+1))) AS FIRSTNAME CLIENTS.NAME, CLIENTS.REFNUM AS [NUMBER], CLIENTS.BADDR2, CLIENTS.BADDR3, CLIENTS.BADDR4, CLIENTS.BADDR5, CLIENTS.PHONE1, '' AS EXT1, CLIENTS.PHONE2, '' AS EXT2, CLIENTS.FAXNUM, '' AS EXT3, CLIENTS.EMAIL, CLIENTS.TERMS, CLIENTS.TAXABLE INTO AlmostFinishedClientTable FROM CLIENTS; Thanks, Harold |
Jim Giles
2007-07-23 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide How can I get the time and date from the server instead of the workstation |
Kay
2007-08-23 |
re: Quick MS Access (JET SQL) to SQL Server (T-SQL) Conversion Guide Hi, I'm new to T-SQL. I usually work in Access. When I did an Access query for a particular set of data, I created a large nested IIF statement to return a "Yes" or "No" based upon two conditions, a certain code in one column and the new calculated column with a number of days. Here is the JETSQL: SELECT dbo_qw_TUSD_StuDemogDistNoSched.stustatc, dbo_qw_TUSD_StuDemogDistNoSched.schoolc, dbo_qw_TUSD_StuDemogDistNoSched.graden, dbo_qw_TUSD_StuDemogDistNoSched.ident, dbo_qw_TUSD_StuDemogDistNoSched.lastname, dbo_qw_TUSD_StuDemogDistNoSched.firstname, dbo_qw_TUSD_StuDemogDistNoSched.middlename, dbo_zengprof.descript, dbo_status.statusvalue, dbo_status.edate, dbo_status.xdate, DateDiff("d",dbo_status.edate,Now()) AS [Time], IIf(dbo_status.statusvalue="11" And [Time]>365,"No",IIf(dbo_status.statusvalue="12" And [Time]>365,"No",IIf(dbo_status.statusvalue="15" And [Time]>365,"No",IIf(dbo_status.statusvalue="13" And [Time]>730,"No",IIf(dbo_status.statusvalue="14" And [Time]>730,"No","Yes"))))) AS Comply FROM (dbo_qw_TUSD_StuDemogDistNoSched INNER JOIN dbo_status ON dbo_qw_TUSD_StuDemogDistNoSched.suniq = dbo_status.auniq) INNER JOIN dbo_zengprof ON dbo_status.statusvalue = dbo_zengprof.engprofc WHERE (((dbo_qw_TUSD_StuDemogDistNoSched.stustatc)="A" Or (dbo_qw_TUSD_StuDemogDistNoSched.stustatc)="M") AND ((dbo_status.statusvalue)="11" Or (dbo_status.statusvalue)="12" Or (dbo_status.statusvalue)="13" Or (dbo_status.statusvalue)="14" Or (dbo_status.statusvalue)="15") AND ((dbo_status.xdate) Is Null)) ORDER BY dbo_qw_TUSD_StuDemogDistNoSched.schoolc, dbo_qw_TUSD_StuDemogDistNoSched.graden, dbo_qw_TUSD_StuDemogDistNoSched.lastname; Then I went to the 2005 SQL server and tried to replicate this query as view. I managed to create the calculated field of the number of days, but could not replicate the IIF column. Below is the T-SQL: SELECT TOP (100) PERCENT dbo.qw_TUSD_StuDemogDistNoSched.schoolc, dbo.qw_TUSD_StuDemogDistNoSched.graden, dbo.qw_TUSD_StuDemogDistNoSched.ident, dbo.qw_TUSD_StuDemogDistNoSched.lastname, dbo.qw_TUSD_StuDemogDistNoSched.firstname, dbo.qw_TUSD_StuDemogDistNoSched.middlename, dbo.qw_TUSD_StuDemogDistNoSched.primlangc, dbo.qw_TUSD_StuDemogDistNoSched.ethnicc, dbo.qw_TUSD_StuDemogDistNoSched.homeaddr1, dbo.qw_TUSD_StuDemogDistNoSched.homeaddr2, dbo.qw_TUSD_StuDemogDistNoSched.homecity, dbo.qw_TUSD_StuDemogDistNoSched.homestate, dbo.qw_TUSD_StuDemogDistNoSched.homezip, dbo.qw_TUSD_StuDemogDistNoSched.SPCodes, dbo.status.statusvalue, dbo.status.edate, dbo.status.xdate, dbo.zengprof.descript AS EngProf, dbo.qw_TUSD_StuDemogDistNoSched.stustatc, DATEDIFF(d, dbo.status.edate, GETDATE()) AS TimeElapsed FROM dbo.qw_TUSD_StuDemogDistNoSched INNER JOIN dbo.status ON dbo.qw_TUSD_StuDemogDistNoSched.suniq = dbo.status.auniq INNER JOIN dbo.zengprof ON dbo.status.statusvalue = dbo.zengprof.engprofc WHERE (dbo.status.statusvalue = '11' OR dbo.status.statusvalue = '12' OR dbo.status.statusvalue = '13' OR dbo.status.statusvalue = '14' OR dbo.status.statusvalue = '15') AND (dbo.qw_TUSD_StuDemogDistNoSched.stustatc = 'A' OR dbo.qw_TUSD_StuDemogDistNoSched.stustatc = 'M') AND (dbo.status.xdate IS NULL) ORDER BY dbo.qw_TUSD_StuDemogDistNoSched.schoolc, dbo.qw_TUSD_StuDemogDistNoSched.graden, dbo.qw_TUSD_StuDemogDistNoSched.lastname I tried the CASE, but when I needed two conditions, it would not work. It kept telling me the "AND" was not valid. Any suggestions? It would really be a great help. |
bob
2007-11-06 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Hey, i didn't see anything regarding the MSAccess 'Frist' command. I haven't been able to find an alternative in SQL |
Shridhar
2008-02-05 |
two where condition in one table usin ms-access hello friends if some one solve this problem it will be a great challenge to them i have a table ex:a and data as follows Item Name Sale Qty Status a 1 PASSED b 1 PASSED c 1 PASSED a 1 PASSED b 1 PASSED c 1 PASSED a 1 CANCELLD b 1 CANCELLED c 1 CANCELLED Now the problem is: write a single query to retrive the i.Item name ii. No of qty passed iii. No Of Qty CANCELLED in one statement. If Any one can solve this problem and mail to :shri_nelamegham@rediffmail.com |
Serum
2008-03-05 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet SELECT ItemName, SUM(IIF(Status='Passed', SaleQty, 0)) as Passed, SUM(IIF(Status='Cancelled', SaleQty, 0)) as Cancelled FROM a GROUP BY ItemName |
kranthi
2008-03-06 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet HI, I Tried to wirte a query to take day and month from a date field in MS Access. This is very help full me to string and date functions. |
Sharad
2008-06-26 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Thanks for providing an excellent reference |
Mike Downes
2008-07-15 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Hi If someone could be of assistance I'm trying to convert the following JETSQL SELECT statement to T-SQL: SELECT [Chronos data extract (Pt1)].SPECIALTY_NATNL_CODE AS Spec, [Chronos data extract (Pt1)].Name, [Chronos data extract (Pt1)].DateOfBirth, [Chronos data extract (Pt1)].Age, dbo_PATIENT_VIEW.Sex, [Chronos data extract (Pt1)].SpokenLanguage, [Chronos data extract (Pt1)].HospitalNumber, [Chronos data extract (Pt1)].AttendanceIdentifier, dbo_PATIENT_VIEW.HomePhone, dbo_PATIENT_VIEW.WorkPhone, "-" AS ContactDescription, "-" AS MobilePhone, "-" AS EmailAddress, "-" AS FaxNumber, IIf(dbo_PATIENT_VIEW.Address1 Is Null,[Address2] & ", " & [Address3] & ", " & [Address4],dbo_PATIENT_VIEW.Address1 & ", " & [Address2] & ", " & [Address3] & ", " & [Address4]) AS Address, dbo_PATIENT_VIEW.Postcode, "-" AS Type, "-" AS TimeOfDay, [Chronos data extract (Pt1)].Appointment, [Chronos data extract (Pt1)].Consultant, [Chronos data extract (Pt1)].[Clinic Code] INTO [Chronos Data Extract] FROM dbo_PATIENT_VIEW INNER JOIN [Chronos data extract (Pt1)] ON dbo_PATIENT_VIEW.PATNT_REFNO = [Chronos data extract (Pt1)].PATNT_REFNO; On Parsing this statement I get the following error... Incorrect syntax near the keyword 'IS'. |
SHAJ
2008-10-09 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Thanks This was very useful just ried to figure out something about getting a particular Section of a string. The CHARINDEX Function Helped Cheers SHAJ |
elabbassi
2008-12-12 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet please i don't convert : val(dbo.Reparation.Date_rep) to sql server thinks |
Chirag [atel
2008-12-29 |
Convert Microsoft Access to SQL Server (T-SQL) UPDATE Jobs, Jobs AS Jobs_1 SET Jobs.jobClientRef = [Jobs_1].[jobClientRef], Jobs.jobDispatchFrom = [Jobs_1].[jobDispatchFrom], Jobs.jobDispatchTo = [Jobs_1].[jobDispatchTo], Jobs.jobPaymentBy = [Jobs_1].[jobPaymentBy], Jobs.jobCost = [Jobs_1].[jobCost], Jobs.jobDriver = [Jobs_1].[jobDriver], Jobs.jobType = [Jobs_1].[jobType], Jobs.jobNotes = [Jobs_1].[jobNotes], Jobs.jobRep = [Jobs_1].[jobRep], Jobs.jobSusRID = [Jobs_1].[jobSusRID], Jobs.jobZonRID = [Jobs_1].[jobZonRID], Jobs.jobGroup = [Jobs_1].[jobGroup], Jobs.jobText1 = [Jobs_1].[jobText1], Jobs.jobText2 = [Jobs_1].[jobText2], Jobs.jobText3 = [Jobs_1].[jobText3], Jobs.jobText4 = [Jobs_1].[jobText4], Jobs.jobText5 = [Jobs_1].[jobText5], Jobs.jobText6 = [Jobs_1].[jobText6], Jobs.jobText7 = [Jobs_1].[jobText7], Jobs.jobText8 = [Jobs_1].[jobText8], Jobs.jobText9 = [Jobs_1].[jobText9], Jobs.jobYesNo1 = [Jobs_1].[jobYesNo1], Jobs.jobYesNo2 = [Jobs_1].[jobYesNo2], Jobs.jobYesNo3 = [Jobs_1].[jobYesNo3], Jobs.jobYesNo4 = [Jobs_1].[jobYesNo4], Jobs.jobYesNo5 = [Jobs_1].[jobYesNo5], Jobs.jobYesNo6 = [Jobs_1].[jobYesNo6], Jobs.jobNumericLong1 = [Jobs_1].[jobNumericLong1], Jobs.jobNumericLong2 = [Jobs_1].[jobNumericLong2], Jobs.jobNumericLong3 = [Jobs_1].[jobNumericLong3], Jobs.jobNumericLong4 = [Jobs_1].[jobNumericLong4], Jobs.jobNumericLong5 = [Jobs_1].[jobNumericLong5], Jobs.jobNumericLong6 = [Jobs_1].[jobNumericLong6], Jobs.jobNumericLong7 = [Jobs_1].[jobNumericLong7], Jobs.jobNumericLong8 = [Jobs_1].[jobNumericLong8], Jobs.jobNumericLong9 = [Jobs_1].[jobNumericLong9], Jobs.jobNumericSng1 = [Jobs_1].[jobNumericSng1], Jobs.jobNumericSng2 = [Jobs_1].[jobNumericSng2], Jobs.jobNumericSng3 = [Jobs_1].[jobNumericSng3], Jobs.jobNumericSng4 = [Jobs_1].[jobNumericSng4], Jobs.jobNumericSng5 = [Jobs_1].[jobNumericSng5], Jobs.jobNumericSng6 = [Jobs_1].[jobNumericSng6], Jobs.jobNumericSng7 = [Jobs_1].[jobNumericSng7], Jobs.jobNumericSng8 = [Jobs_1].[jobNumericSng8], Jobs.jobNumericSng9 = [Jobs_1].[jobNumericSng9], Jobs.jobCurrency1 = [Jobs_1].[jobCurrency1], Jobs.jobCurrency2 = [Jobs_1].[jobCurrency2], Jobs.jobCurrency3 = [Jobs_1].[jobCurrency3], Jobs.jobCurrency4 = [Jobs_1].[jobCurrency4], Jobs.jobCurrency5 = [Jobs_1].[jobCurrency5], Jobs.jobCurrency6 = [Jobs_1].[jobCurrency6], Jobs.jobDate1 = [Jobs_1].[jobDate1], Jobs.jobDate2 = [Jobs_1].[jobDate2], Jobs.jobDate3 = [Jobs_1].[jobDate3], Jobs.jobDateTime1 = [Jobs_1].[jobDateTime1], Jobs.jobDateTime2 = [Jobs_1].[jobDateTime2], Jobs.jobDateTime3 = [Jobs_1].[jobDateTime3], Jobs.jobMemo1 = [Jobs_1].[jobMemo1] WHERE (((Jobs.jobJobRID)=0) AND ((Jobs_1.jobJobRID)=0)); |
Bhavin Pandya
2009-03-18 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Your this help page is awesome and thanks for your this help If possible then send me this page in email this is my id bhavinpandya84@yahoo.com Regard Bhavin |
robert
2009-08-05 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet This was very good information. Thanks for posting. I have an additional question how would you convert the following from Access 2007 to SQL Server 2005. [T Shipments].[SH PU Rcvd EDI 0/1] = 1 [T Shipments].[Load Id] = [T Loads].[Load Id] Msg 102, Level 15, State 1, Line 21 Incorrect syntax near '='. |
SLM
2009-08-26 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Hello, I'm trying to convert a number string into a text string in Access 2007 is that possible |
John McLoughlin
2009-09-17 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet I am finishing up development for a generic Database Upgrade Conversion process involving the automated conversion of Access Table, View and Index Structures in a VPASP Shopping or any other Access System to their SQL Server 2005/2008 equivalents. It runs right from your server without the need for any outside assistance from external staff or consultants. After creating a clone of your Access tables, indexes and views in SQL Server this data migration routine will selectively migrate all the data from your Access tables into your new SQL Server 2005/2008 tables without having to give out either your actual Access Database or the Table Contents or your passwords to anyone. Here is the Reverse Engineering part of the process running against a system with almost 200 tables and almost 300 indexes and Views which is being done as a system acceptance test. Still a work in progress, but the core pieces are in place. http://www.21stcenturyecommerce.com/SQLDDL/ViewDBTables.asp I do the automated reverse engineering of the Access Table DDLs (Data Definition Language) and convert them into SQL equivalent DDL Statements, because table structures and even extra tables might be slightly different for every VPASP customer and for every version of VP-ASP out there. I am finishing the actual data conversion routine which would migrate the data from Access to SQL Server after these new SQL Tables have been created including any views or indexes. It is written entirely in ASP, with VB Scripting, the File System Object (FSO), the Dictionary Object, XML, DHTML, JavaScript right now and runs pretty quickly as you will see against a SQL Server 2008 Database just for the sake of an example. It takes perhaps 15-20 seconds to reverse engineer almost 500 different database objects. There might be a total of over 2,000 columns involved in this example for the 170 tables and 270 indexes involved. I have even come up with a way for you to run both VPASP systems in parallel using 2 different database connection files on the same server just to be sure that orders entered on the Access System and the SQL Server system produce the same results before actual cutover to production. On a separate note: Would there be any interest from any VP-ASP customers in a 100% SQL Server 2008 version of VPASP which used stored procedures instead of in-line SQL as part and parcel of this Access to SQL Server conversion process? Let me know. I have always found something between a 50% to 100% performance boost after converting from Access to SQL Server especially for larger databases for most complex ASP systems. Access can have some performance issues after reaching the 250 MB to 400 MB levels as some of you may have discovered. Data loss due to Access Table corruption is always a possibility as well. Not quite as bad as MySQL with their data corruption and database disruption issues, but an issue nonetheless. Are there any other issues in your possible Access to SQL Server migration which you would like addressed? There are other ways to upsize or upgrade Access to SQL Server but this method has always been the most reliable and the best that I have ever seen in actual operation. John (a/k/a The SQL Dude) sales@designersyles.biz (This is a VP-ASP Demo Site) |
Jaek
2009-09-18 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet This is an awesome post - I was going nuts trying to figure out the T-SQL equivalent of an IIF() statement for use in a calculated field. Now I can finally go home and go to bed. Bless you. |
msorens
2009-12-11 |
Discrepancies with JET in a more general ODBC context Jeff: I assume everything you state is true for Access (i.e. I do not use Access) but I assumed that it would more generally be true for any ODBC data source and I am finding that what you have listed only applies *partially*. For example, if I query an Excel 2003 spreadsheet via ODBC, the MID() function works and the SUBSTRING() function does not, just as you indicated. But I must still use single quotes for strings (not double quote) and percent (not asterisk) for wildcard. That leads me to a plethora of questions: --Do all ODBC data sources use the JET engine? --Do different versions of the JET engine perhaps account for the differences I am seeing? --How do I determine what JET version applies to what product? --How do I find out what SQL commands to use for querying Excel through ODBC? Same question for CSV files. |
Jeff
2009-12-11 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Hi msorens -- no, JET has no connection really with ODBC. Two different things. ODBC is a "layer" on top of any datasource, and has it's own standard syntax. |
Tom
2009-12-30 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Great info. Thanks very much!! |
David W. Fenton
2010-03-08 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet Perhaps you should incorporate a comment or two about SQL92 mode, introduced in Access 2003. So far as I can see in the above, it has an effect only on the wildcards, i.e., SQL92 mode in Access uses the same wildcards as T-SQL. Also, you might add information on derived tables: <pre> SELECT A.Field1 FROM (SELECT SomeTable.Field1 FROM SomeTable) As A</pre> In Jet/ACE SQL, that would be: <pre> SELECT A.Field1 FROM [SELECT SomeTable.Field1 FROM SomeTable]. As A</pre> But if you're running in SQL92 mode, you can do the first version, which is standard for most SQL dialects. |
Atiq
2010-05-28 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet SELECT (SELECT date FROM rewardsmet r WHERE customer_id=38 AND m.macro_id=r.macro_id) AS [date], (Not `date` Is Null) AS met, * FROM macros AS m WHERE (((m.[type])=1)); |
Chad
2010-07-16 |
re: Convert Microsoft Access (JET SQL) to SQL Server (T-SQL) Cheatsheet I'm trying to conver this to T-SQL Right(nz([Old Description]),Len(nz([Old Description]))+InStr(nz([Old Description])," ")) AS Description Any Ideas? |