Select Archivo Texto Openrowset

26/01/2008 - 01:57 por Miguel Soto | Informe spam
Como puedo hacer una consulta select con un archivo de texto utilizando
openrowset?

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
26/01/2008 - 22:14 | Informe spam
Miguel Soto,

Using Openrowset to query csv and tsv files
http://devrants.blog.com/1247632/

How to combine the results of two text files
http://www.databasejournal.com/feat..._3331881_3

How to read CSV File in SQL Server 2005 using OpenRowSet Function
http://forums.microsoft.com/MSDN/Sh...spx?PostID59168&SiteID=1

A mi personalmente me gusta usar "Microsoft Text Driver", principalmente
porque puedes tambien crear un archivo con las especificaciones sobre la
estructura de lo que contiene el archivo de texto. Este archivo debe tener el
nombre Schema.ini y su contenido depende de lo que contenga el archivo de
texto. Aca puedes encontrar las especificaciones de lo que puede contener.

Schema.ini File (Text File Driver)
http://msdn2.microsoft.com/en-us/li...09353.aspx

Veamos un ejemplo.

Supongamos que deseo ver el contenido de un archivo CSV desde SSMS. Este
archivo esta en C:\Temp y su nombre es Test.csv. Aca esta su contenido:

1,"SQL Server 2000"
2,"SQL Server 2005"
3,"SQL Server 2008"

En el mismo folder donde este se encuentra, creo el archivo Schema.ini con
la informacion sobre la estructura de Test.csv. En el pongo:

[Test.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=False
MaxScanRows=0
Col1=ProductID Long
Col2=ProductName Text Width 50

- Nombre del archivo cuyo esquema se esta refiriendo
- Formato del archivo
- Conjunto de caracteres usado
- La primera fila no contiene el nombre de las columnas
- Que escanee todo el archivo para traer los valores
- La columna 1 se llama ProductID y es INT (Long en Access)
- La segunda columna es de caracteres y su largo es 50

Con esta informaciòn ya podemos usar desde SSMS o enterprise Manager, la
sgte sentencia:

SELECT * FROM
OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
*.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv');
GO

Resultado:

ProductID ProductName
1 SQL Server 2000
2 SQL Server 2005
3 SQL Server 2008

No solo eso, ademas podemos preguntar por el tipo de data que contiene el
archivo.

;WITH [test]
AS
(
SELECT
*
FROM
OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
*.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv')
)
SELECT DISTINCT
'ProductID' AS [col_name],
SQL_VARIANT_PROPERTY(CAST(ProductID AS SQL_VARIANT), 'BaseType') AS
[data_type],
NULL AS [Length]
FROM
[test]
UNION ALL
SELECT DISTINCT
'ProductName',
SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'BaseType'),
SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'MaxLength ')
FROM
[test]
GO


AMB

"Miguel Soto" wrote:

Como puedo hacer una consulta select con un archivo de texto utilizando
openrowset?
Respuesta Responder a este mensaje
#2 Miguel Soto
28/01/2008 - 17:46 | Informe spam
Muchas Gracias Alejandro, puedo hacer ya la lectura, pero me doy cuenta que
necesito el archivo schema.ini, como voy a leer N archivos diferentes,
intente hacerlo sin ese archivo, pero me toma el primer renglon como nombre
de la columna, se podra hacer algo para evitar el archivo schema.ini y al
mismo tiempo que no tome el primer renglon como nombre de columna?, no se si
el driver tenga un parametro adicional donde pueda indicarle esto.

Saludos, y te agradesco de antemano la ayuda.

"Alejandro Mesa" wrote:

Miguel Soto,

Using Openrowset to query csv and tsv files
http://devrants.blog.com/1247632/

How to combine the results of two text files
http://www.databasejournal.com/feat..._3331881_3

How to read CSV File in SQL Server 2005 using OpenRowSet Function
http://forums.microsoft.com/MSDN/Sh...spx?PostID59168&SiteID=1

A mi personalmente me gusta usar "Microsoft Text Driver", principalmente
porque puedes tambien crear un archivo con las especificaciones sobre la
estructura de lo que contiene el archivo de texto. Este archivo debe tener el
nombre Schema.ini y su contenido depende de lo que contenga el archivo de
texto. Aca puedes encontrar las especificaciones de lo que puede contener.

Schema.ini File (Text File Driver)
http://msdn2.microsoft.com/en-us/li...09353.aspx

Veamos un ejemplo.

Supongamos que deseo ver el contenido de un archivo CSV desde SSMS. Este
archivo esta en C:\Temp y su nombre es Test.csv. Aca esta su contenido:

1,"SQL Server 2000"
2,"SQL Server 2005"
3,"SQL Server 2008"

En el mismo folder donde este se encuentra, creo el archivo Schema.ini con
la informacion sobre la estructura de Test.csv. En el pongo:

[Test.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=False
MaxScanRows=0
Col1=ProductID Long
Col2=ProductName Text Width 50

- Nombre del archivo cuyo esquema se esta refiriendo
- Formato del archivo
- Conjunto de caracteres usado
- La primera fila no contiene el nombre de las columnas
- Que escanee todo el archivo para traer los valores
- La columna 1 se llama ProductID y es INT (Long en Access)
- La segunda columna es de caracteres y su largo es 50

Con esta informaciòn ya podemos usar desde SSMS o enterprise Manager, la
sgte sentencia:

SELECT * FROM
OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
*.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv');
GO

Resultado:

ProductID ProductName
1 SQL Server 2000
2 SQL Server 2005
3 SQL Server 2008

No solo eso, ademas podemos preguntar por el tipo de data que contiene el
archivo.

;WITH [test]
AS
(
SELECT
*
FROM
OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
*.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv')
)
SELECT DISTINCT
'ProductID' AS [col_name],
SQL_VARIANT_PROPERTY(CAST(ProductID AS SQL_VARIANT), 'BaseType') AS
[data_type],
NULL AS [Length]
FROM
[test]
UNION ALL
SELECT DISTINCT
'ProductName',
SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'BaseType'),
SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'MaxLength ')
FROM
[test]
GO


AMB

"Miguel Soto" wrote:

> Como puedo hacer una consulta select con un archivo de texto utilizando
> openrowset?
Respuesta Responder a este mensaje
#3 Alejandro Mesa
29/01/2008 - 01:57 | Informe spam
Miguel Soto,

Puedes incluir el esquema para multiples archivos dentro del archivo
schema.ini.

[Test_1.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=False

[Test_2.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=False
...


Tambien puedes incluir propiedades extendidas en la misma sentencia.

select *
from OpenRowset('MSDASQL','Driver={Microsoft Text Driver (*.txt;
*.csv)};DefaultDir=C:\Temp;Extended
properties=''ColNameHeader=False;Format=CSVDelimited;''','select * from
Test.csv')


AMB

"Miguel Soto" wrote:

Muchas Gracias Alejandro, puedo hacer ya la lectura, pero me doy cuenta que
necesito el archivo schema.ini, como voy a leer N archivos diferentes,
intente hacerlo sin ese archivo, pero me toma el primer renglon como nombre
de la columna, se podra hacer algo para evitar el archivo schema.ini y al
mismo tiempo que no tome el primer renglon como nombre de columna?, no se si
el driver tenga un parametro adicional donde pueda indicarle esto.

Saludos, y te agradesco de antemano la ayuda.

"Alejandro Mesa" wrote:

> Miguel Soto,
>
> Using Openrowset to query csv and tsv files
> http://devrants.blog.com/1247632/
>
> How to combine the results of two text files
> http://www.databasejournal.com/feat..._3331881_3
>
> How to read CSV File in SQL Server 2005 using OpenRowSet Function
> http://forums.microsoft.com/MSDN/Sh...spx?PostID59168&SiteID=1
>
> A mi personalmente me gusta usar "Microsoft Text Driver", principalmente
> porque puedes tambien crear un archivo con las especificaciones sobre la
> estructura de lo que contiene el archivo de texto. Este archivo debe tener el
> nombre Schema.ini y su contenido depende de lo que contenga el archivo de
> texto. Aca puedes encontrar las especificaciones de lo que puede contener.
>
> Schema.ini File (Text File Driver)
> http://msdn2.microsoft.com/en-us/li...09353.aspx
>
> Veamos un ejemplo.
>
> Supongamos que deseo ver el contenido de un archivo CSV desde SSMS. Este
> archivo esta en C:\Temp y su nombre es Test.csv. Aca esta su contenido:
>
> 1,"SQL Server 2000"
> 2,"SQL Server 2005"
> 3,"SQL Server 2008"
>
> En el mismo folder donde este se encuentra, creo el archivo Schema.ini con
> la informacion sobre la estructura de Test.csv. En el pongo:
>
> [Test.csv]
> Format=CSVDelimited
> CharacterSet=ANSI
> ColNameHeader=False
> MaxScanRows=0
> Col1=ProductID Long
> Col2=ProductName Text Width 50
>
> - Nombre del archivo cuyo esquema se esta refiriendo
> - Formato del archivo
> - Conjunto de caracteres usado
> - La primera fila no contiene el nombre de las columnas
> - Que escanee todo el archivo para traer los valores
> - La columna 1 se llama ProductID y es INT (Long en Access)
> - La segunda columna es de caracteres y su largo es 50
>
> Con esta informaciòn ya podemos usar desde SSMS o enterprise Manager, la
> sgte sentencia:
>
> SELECT * FROM
> OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
> *.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv');
> GO
>
> Resultado:
>
> ProductID ProductName
> 1 SQL Server 2000
> 2 SQL Server 2005
> 3 SQL Server 2008
>
> No solo eso, ademas podemos preguntar por el tipo de data que contiene el
> archivo.
>
> ;WITH [test]
> AS
> (
> SELECT
> *
> FROM
> OPENROWSET ('MSDASQL', 'Driver={Microsoft Text Driver (*.txt;
> *.csv)};DBQ=C:\Temp;', 'SELECT * from Test.csv')
> )
> SELECT DISTINCT
> 'ProductID' AS [col_name],
> SQL_VARIANT_PROPERTY(CAST(ProductID AS SQL_VARIANT), 'BaseType') AS
> [data_type],
> NULL AS [Length]
> FROM
> [test]
> UNION ALL
> SELECT DISTINCT
> 'ProductName',
> SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'BaseType'),
> SQL_VARIANT_PROPERTY(CAST(ProductName AS SQL_VARIANT), 'MaxLength ')
> FROM
> [test]
> GO
>
>
> AMB
>
> "Miguel Soto" wrote:
>
> > Como puedo hacer una consulta select con un archivo de texto utilizando
> > openrowset?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida