Friday, August 12, 2011

How to use SQL Server 2008 R2 Import and Export Wizard to import a CSV file into SQL Azure

The SQL Server 2008 R2 Import and Export Wizard will allow you to import a CSV ‘flat’ file directly into SQL Azure. The process is relatively simple, but it’s not obvious. The following steps will help guide you through the process.

The SQL Server Import and Export Wizard is available on the SQL Server 2008 R2 media, so you must obtain your organization’s copy of SQL Server 2008 R2 software.

1. Run the wizard from the Windows Start menu, Start à Programs à SQL Server 2008 R2 à Import and Export Data.

2. Select Flat File Source as the data source, browse for your CSV file, and then select the settings appropriate for your file. For example, the fields in my file are surrounded by double-quotes if they contain commas, so I select double-quotes as my text qualifier. Also, the column names are found in the first row of my file. Click Next.

3. Verify that your data looks as you expected. Click on Advanced on the left.

4. Remember that the wizard is looking at a flat file, so it doesn’t make many assumptions about the data contained therein. It’s up to you to go through each column in this screen and adjust data types and sizes. The following table shows a mapping of data types between the wizard and SQL Server. Click Next after you’ve made your changes.

Data Type

SQL Server

(SQLOLEDB; SQLNCLI10)

DT_BOOL

bit

DT_BYTES

binary, varbinary, timestamp

DT_CY

smallmoney, money

DT_DATE

DT_DBDATE

date

DT_DBTIME

DT_DBTIME2

time(p)

DT_DBTIMESTAMP

datetime, smalldatetime

DT_DBTIMESTAMP2

datetime2

DT_DBTIMESTAMPOFFSET

datetimeoffset(p)

DT_DECIMAL

DT_FILETIME

DT_GUID

uniqueidentifier

DT_I1

DT_I2

smallint

DT_I4

int

DT_I8

bigint

DT_NUMERIC

decimal, numeric

DT_R4

real

DT_R8

float

DT_STR

char, varchar

DT_UI1

tinyint

DT_UI2

DT_UI4

DT_UI8

DT_WSTR

nchar, nvarchar, sql_variant, xml

DT_IMAGE

image

DT_NTEXT

ntext

DT_TEXT

text

Table 1 - Data type mappings (source: http://msdn.microsoft.com/en-us/library/ms141036.aspx)

5. Here’s the part that’s not obvious. You must select .Net Framework Data Provider for SqlServer as the destination. Then, enter the following information.

· Data Source – This is the fully qualified DNS name (FQDN) of your SQL Azure server.

· Initial Catalog – This must be an existing database on the SQL Azure server.

· User ID

· Password

6. Click Edit Mappings.

7. Uncheck the Nullable box for your primary key column. Did I mention that a SQL Azure table must have a primary key? Notice that there isn’t a way to specify the primary key in this dialog. We’ll have to add that to the SQL statement manually. Click the Edit SQL button.

8. Add the “Primary Key” option to the declaration of your primary key column, and click OK.

Note: If you’re using a clustered primary key, please see SQL Server Books Online for the syntax.

9. Review the data type mappings. Note that I receive warnings about the default DT_STR types, so I ignore them.

10. Keep the default setting, Run immediately, click Next, and then click Finish on the next screen.

11. Finally, review the status of the import, and enjoy using your data in SQL Azure.

Wednesday, June 22, 2011

RS1.EXE works with SSRS 2008 R2 with SP1

Thanks to my anonymous friend, Baptiste Lefrançois, it appears that my RS1.exe build still works with SQL Server Reporting Services 2008 R2, but you need Service Pack 1. Here's my original post:


And here's the description, in my gracious friend's own words:

"Hello Joe,

Thanks for your help, I've understood my mistake but finally my problem was an official bug of SQL Server Report Service. I just want to tell you how I resolved it for next person who will be in the same situation. My problem was the LogonUser didn't return any cookie, and my authCookie was always null, never affected :( The specific error message was : "Authorization ticket not received by LogonUser". But I've already followed all recommended procedures on the msdn but never resolve my problem. My authentication form on ReportServer page worked perfectly with any web navigator, but with a console application impossible, allways the same [... :)] error =/ I've tried to authenticate thanks of navigator on ReportsManager page and... surprise I got the same error : "Authorization ticket not received by LogonUser". After lot's of search and googling , I've read an article explaining this bug. It was in fact an official bug and Microsoft published a fix whish was after included in the SQL SERVER 2008R2 SP1. I had only the SQL SERVER 2008R2 with no update. After install the SP1, I tested your "old" RS Utility for form authentication, rs1.exe. And It works perfectly now. Thank's so much ! Maybe my bug and the solution I've found will be helpfull for the future ;)

Thanks a lot, So Nice! =)

Baptiste"

Friday, April 22, 2011

XMA/ECMA call-based export does not support multi-valued attribute-level deltas

Here's a seemingly undocumented feature of the XMA/ECMA. I've got an XMA that's doing call-based exports, and I've noticed that it doesn't contain atomic add & remove operations at the item level in a multi-valued attribute list. Instead, it's giving me the entire list of items in the object's current state.

This is interesting, because when I look at the pending export in the sync engine, I see the atomic operations.




When I examine the arguments passed into the ExportEntry API call, I see a Replace at the top level, but nothing on the multi-valued attribute (member in this case).

[ExportEntry]

modificationType: Replace
changedAttributes: member
csentry: [Microsoft.MetadirectoryServices.Impl.CSEntryMAImpl] CS Role CN=ROLE-CRM-Test1
DN: CN=ROLE-CRM-Test1
ObjectClass: Microsoft.MetadirectoryServices.Impl.GenericValueCollection
ObjectType: Role
RDN: CN=ROLE-CRM-Test1
displayName [String] ROLE-CRM-Test1
member [Reference] CN=007528
CN=dev.userA
CN=dev.userB
CN=dev.userC
CN=dev.userD
CN=dev.userE
CN=dev.userF
(Wouldn't it be nice if you could just serialize the CSEntry object?)

So, I looked around on the forums, and sure enough, Markus confirms my observation:

"If members is in the list of changed attributes, the member attribute of the CSEntry contains the most recent value for this attribute.

"If you need to determine the individual change for each member, you need to calculate this. The ECMA doesn’t provide multi-valued attribute level changes."


Rebecca Croft also informs me that not even the file-based export supports item-level deltas on multi-valued attributes.

I'd love to be proven wrong about this...