{"id":2877,"date":"2011-07-13T07:02:40","date_gmt":"2011-07-13T06:02:40","guid":{"rendered":"http:\/\/blog.capdata.fr\/?p=2877"},"modified":"2019-09-13T14:35:34","modified_gmt":"2019-09-13T13:35:34","slug":"openrowset-episode-1","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/","title":{"rendered":"OPENROWSET, \u00e9pisode 1"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877&#038;title=OPENROWSET%2C%20%C3%A9pisode%201\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=OPENROWSET%2C%20%C3%A9pisode%201&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>Alors l\u00e0 c&#8217;est un puits sans fond. <a href=\"http:\/\/msdn.microsoft.com\/fr-fr\/library\/ms190312.aspx\">OPENROWSET()<\/a> est tellement vaste qu&#8217;on peut se demander si on touchera un jour les limites de la chose.<\/p>\n<p>En gros c&#8217;est une fonction qui appelle un provider OLEDB, et qui retourne un r\u00e9sultat au format table-valu\u00e9. Par exemple on l&#8217;utilise pour ex\u00e9cuter des requ\u00eates sur des serveurs li\u00e9s en passant le nom d&#8217;un provider (MSDAORA pour oracle, SQLNCLI pour le client natif MSSQL, etc&#8230;). Par exemple:<\/p>\n<pre><span style=\"color: #0000ff;\">SELECT RemoteDepts.*\r\nFROM OPENROWSET('SQLNCLI', 'Server=MS2K8-Win2008-1;Trusted_Connection=yes;',\r\n     'SELECT * FROM CAPDATA.dbo.DEPARTEMENT') AS RemoteDepts;<\/span><\/pre>\n<p>Jusque l\u00e0, rien de r\u00e9volutionnaire.<\/p>\n<h2>Juste pour rire, on r\u00e9invente le CSV engine:<\/h2>\n<p>Il existe un certain nombre de providers non document\u00e9s sur lesquels s&#8217;appuient en g\u00e9n\u00e9ral\u00a0 les <em>DMV\/DMF <\/em>et quelques fonctions table-valu\u00e9es comme<em> fn_dblog()<\/em>,<em> fn_helpcollations()<\/em>, etc&#8230; qui feront l&#8217;objet de l&#8217;\u00e9pisode 2. Il en existe un toutefois, <strong>BULK<\/strong>,\u00a0 qui est parfaitement document\u00e9 et tr\u00e8s pratique, et qui permet de faire du chargement massif notamment (l&#8217;anc\u00eatre du BULK INSERT T-SQL) mais aussi de renvoyer \u00e0 peu pr\u00e8s n&#8217;importe quoi sous une forme table-valu\u00e9e.<\/p>\n<p>Par exemple, on peut reprendre \u00e0 notre compte le concept du <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/csv-storage-engine.html\">moteur CSV<\/a> de MySQL, et cr\u00e9er des vues qui mappent des fichiers CSV sur disque, pour visualiser le contenu sans les stocker physiquement dans la base. Un exemple de fichier CSV et de fichier de format (pour plus d&#8217;infos voir <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms178129.aspx\">la page MSDN<\/a> concernant les fichiers de format):<\/p>\n<p><strong>bulktest.csv:<\/strong><\/p>\n<pre><span style=\"color: #008000;\">LOUISH,21941\r\nDAVID,21940\r\nLOUISP,21943\r\nLAURENT,21942\r\nJSEB,21944<\/span><\/pre>\n<p><strong>bulktest.fmt:<\/strong><\/p>\n<pre><span style=\"color: #008000;\">9.0\r\n2\r\n1 SQLCHAR 0 10 \",\" 1 CurName \"\"\r\n2 SQLCHAR 0 5 \"\\r\\n\" 2 ID \"\"<\/span><\/pre>\n<p><strong>La vue T-SQL:<\/strong><\/p>\n<pre><span style=\"color: #0000ff;\">create view CSVENgine\r\nas\r\n    select * from openrowset(bulk 'V:\\DBA2\\MSSQL.1\\MSSQL\\Backup\\bulktest.csv',\r\n    FORMATFILE = 'V:\\DBA2\\MSSQL.1\\MSSQL\\Backup\\bulktest.fmt') as CSV1\r\nGO\r\n<\/span><\/pre>\n<pre><span style=\"color: #0000ff;\">select * from CSVENgine order by ID desc\r\n\r\n<\/span><span style=\"color: #0000ff;\"><em>CurName\u00a0\u00a0\u00a0 ID\r\n---------- -----\r\nJSEB\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 21944\r\nLOUISP\u00a0\u00a0\u00a0\u00a0 21943\r\nLAURENT\u00a0\u00a0\u00a0 21942\r\nLOUISH\u00a0\u00a0\u00a0\u00a0 21941\r\nDAVID\u00a0\u00a0\u00a0\u00a0\u00a0 21940\r\n\r\n(5\u00a0ligne(s) affect\u00e9e(s)<\/em><\/span>)<\/pre>\n<p>Seule petite ombre au tableau, le provider BULK ne permet pas la mise \u00e0 jour, on ne peut acc\u00e9der aux donn\u00e9es qu&#8217;en lecture seule. Mais \u00e7a reste quand m\u00eame bien pratique pour attaquer une trace perfmon directement en SQL.<\/p>\n<h2>Charger des fichiers binaires:<\/h2>\n<p>Les options SINGLE_BLOB \/ SINGLE_CLOB\/ SINGLE_NCLOB du provider BULK permettent en outre de charger des  documents binaires (vid\u00e9os, images, PDF, documents word, etc&#8230;)\u00a0 dans  des tables, respectivement soit en varbinary(max) \/ varchar(max) \/ nvarchar(max) si les  fichiers sont inf\u00e9rieurs \u00e0 2Gb comme c&#8217;est la cas dans l&#8217;exemple, soit  dans du filestream pour les fichiers sup\u00e9rieurs.<\/p>\n<pre><span style=\"color: #0000ff;\">create table Documents (ID numeric identity, title varchar(255), Filedata varbinary(max))\r\n\r\ninsert into Documents (title, Filedata)\r\nSELECT 'SQL 2008 Licensing',\r\ndoc.* from OPENROWSET(BULK 'E:\\CAPDATA\\DOCUMENTATION\\SGBD\\SQL Server\\WINWORDS\\2008\r\nSQL Licensing Overview final.docx', SINGLE_BLOB) as doc\r\n\r\ninsert into Documents (title, Filedata)\r\nSELECT 'DBM Sharepoint Labs',\r\ndoc.* from OPENROWSET(BULK 'E:\\CAPDATA\\DOCUMENTATION\\SGBD\\SQL Server\\WINWORDS\\\r\nDBM_Sharepoint_Labs.docx', SINGLE_BLOB) as doc\r\n\r\ninsert into Documents (title, Filedata)\r\nSELECT 'DBM and Log Shipping',\r\ndoc.* from OPENROWSET(BULK 'E:\\CAPDATA\\DOCUMENTATION\\SGBD\\SQL Server\\WINWORDS\\\r\nDBMandLogShipping.docx', SINGLE_BLOB) as doc\r\n\r\ninsert into Documents (title, Filedata)\r\nSELECT 'Database Snapshot Performance',\r\ndoc.* from OPENROWSET(BULK 'E:\\CAPDATA\\DOCUMENTATION\\SGBD\\SQL Server\\WINWORDS\\\r\nDBSnapshotPerf.docx', SINGLE_BLOB) as doc<\/span><\/pre>\n<h2>R\u00e9cup\u00e9rer la sortie d&#8217;une proc\u00e9dure stock\u00e9e sous la forme d&#8217;une table:<\/h2>\n<p>Une astuce monstrueuse r\u00e9v\u00e9l\u00e9e par<a href=\"http:\/\/blogs.technet.com\/b\/wardpond\/\"> Ward Pond<\/a> en 2005, qui d\u00e9tourne l&#8217;utilisation d&#8217;OPENROWSET pour appeler une proc\u00e9dure stock\u00e9e sur le serveur local et retransformer le r\u00e9sultat en format table-valu\u00e9, un peu \u00e0 la fa\u00e7on dont les <a href=\"http:\/\/www.sypron.nl\/mda.html\">tables MDA<\/a> sont appel\u00e9es sous Sybase ASE, et qui nous a sauv\u00e9 la vie bien des fois sur SQL Server 2000 avant que n&#8217;apparaissent les DMV:<\/p>\n<pre><span style=\"color: #0000ff;\">sp_configure 'Ad Hoc Distributed Queries',1\r\nGO\r\nreconfigure\r\nGO<\/span>\r\n<span style=\"color: #0000ff;\">SELECT\u00a0 w.SPID, w.Status, w.loginame, w.blk, w.dbname,w.cmd,\r\nLck.Objid, lck.Type, lck.Mode\r\nFROM\u00a0\u00a0\u00a0 OPENROWSET ('SQLNCLI','Server=(local);TRUSTED_CONNECTION=YES;',\r\n                   'set fmtonly off exec master.dbo.sp_who') as w\r\nINNER JOIN OPENROWSET ('SQLNCLI','Server=(local);TRUSTED_CONNECTION=YES;',\r\n                       'set fmtonly off exec master.dbo.sp_lock') as lck\r\non lck.spid = w.spid\r\nwhere w.blk &lt;&gt; 0\r\nGO\r\n<em>\r\nSPID\u00a0\u00a0 Status\u00a0\u00a0\u00a0\u00a0\u00a0  loginame\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  blk\u00a0\u00a0 dbname\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  cmd\u00a0\u00a0\u00a0  Objid\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Type Mode\r\n------ ------------ ------------------- ----- --------------- ------- ----------- ---- --------\r\n55\u00a0\u00a0\u00a0\u00a0 suspended\u00a0\u00a0\u00a0 DBA2\\dbaffaleuf\u00a0\u00a0\u00a0\u00a0 54\u00a0\u00a0\u00a0 whitepaperz\u00a0\u00a0\u00a0\u00a0 SELECT\u00a0 2073058421\u00a0 TAB\u00a0 IS\r\n55\u00a0\u00a0\u00a0\u00a0 suspended\u00a0\u00a0\u00a0 DBA2\\dbaffaleuf\u00a0\u00a0\u00a0\u00a0 54\u00a0\u00a0\u00a0 whitepaperz\u00a0\u00a0\u00a0\u00a0 SELECT\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DB\u00a0\u00a0 S\r\n55\u00a0\u00a0\u00a0\u00a0 suspended\u00a0\u00a0\u00a0 DBA2\\dbaffaleuf\u00a0\u00a0\u00a0\u00a0 54\u00a0\u00a0\u00a0 whitepaperz\u00a0\u00a0\u00a0\u00a0 SELECT\u00a0 2073058421\u00a0 RID\u00a0 S\r\n55\u00a0\u00a0\u00a0\u00a0 suspended\u00a0\u00a0\u00a0 DBA2\\dbaffaleuf\u00a0\u00a0\u00a0\u00a0 54\u00a0\u00a0\u00a0 whitepaperz\u00a0\u00a0\u00a0\u00a0 SELECT\u00a0 2073058421\u00a0 PAG\u00a0 IS<\/em><\/span><\/pre>\n<h2>Voir plus loin ?<\/h2>\n<p>MS fournit des providers OLEDB pour s&#8217;interfacer avec OPENROWSET, certains sont publics (providers relatifs aux serveurs li\u00e9s, BULK), et certains sont non document\u00e9s et utilis\u00e9s par des vues ou fonctions dynamiques dans SQL Server. C&#8217;est ceux-ci que nous essaierons de r\u00e9f\u00e9rencer et de comprendre dans l&#8217;\u00e9pisode 2. Enfin dans l&#8217;\u00e9pisode 3,\u00a0 nous verrons comment cr\u00e9er son propre provider OLEDB avec Advanced Template Library et Visual C++, et nous essaierons de le faire communiquer avec SQL Server. Du pain sur la planche !<\/p>\n<p>A+ David B.<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877&#038;title=OPENROWSET%2C%20%C3%A9pisode%201\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=OPENROWSET%2C%20%C3%A9pisode%201&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2877\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Alors l\u00e0 c&#8217;est un puits sans fond. OPENROWSET() est tellement vaste qu&#8217;on peut se demander si on touchera un jour les limites de la chose. En gros c&#8217;est une fonction qui appelle un provider OLEDB, et qui retourne un r\u00e9sultat&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7909,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[209,208],"class_list":["post-2877","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sqlserver","tag-oledb","tag-openrowset"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Alors l\u00e0 c&#8217;est un puits sans fond. OPENROWSET() est tellement vaste qu&#8217;on peut se demander si on touchera un jour les limites de la chose. En gros c&#8217;est une fonction qui appelle un provider OLEDB, et qui retourne un r\u00e9sultat&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2011-07-13T06:02:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-09-13T13:35:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/07\/openrowset.png\" \/>\n\t<meta property=\"og:image:width\" content=\"659\" \/>\n\t<meta property=\"og:image:height\" content=\"378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Baffaleuf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Baffaleuf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"OPENROWSET, \u00e9pisode 1\",\"datePublished\":\"2011-07-13T06:02:40+00:00\",\"dateModified\":\"2019-09-13T13:35:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\"},\"wordCount\":521,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"oledb\",\"openrowset\"],\"articleSection\":[\"SQL Server\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\",\"name\":\"OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2011-07-13T06:02:40+00:00\",\"dateModified\":\"2019-09-13T13:35:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OPENROWSET, \u00e9pisode 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\",\"name\":\"David Baffaleuf\",\"sameAs\":[\"http:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/","og_locale":"fr_FR","og_type":"article","og_title":"OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG","og_description":"Alors l\u00e0 c&#8217;est un puits sans fond. OPENROWSET() est tellement vaste qu&#8217;on peut se demander si on touchera un jour les limites de la chose. En gros c&#8217;est une fonction qui appelle un provider OLEDB, et qui retourne un r\u00e9sultat&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2011-07-13T06:02:40+00:00","article_modified_time":"2019-09-13T13:35:34+00:00","og_image":[{"width":659,"height":378,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/07\/openrowset.png","type":"image\/png"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"OPENROWSET, \u00e9pisode 1","datePublished":"2011-07-13T06:02:40+00:00","dateModified":"2019-09-13T13:35:34+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/"},"wordCount":521,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["oledb","openrowset"],"articleSection":["SQL Server"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/","url":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/","name":"OPENROWSET, \u00e9pisode 1 - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2011-07-13T06:02:40+00:00","dateModified":"2019-09-13T13:35:34+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/openrowset-episode-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"OPENROWSET, \u00e9pisode 1"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf","name":"David Baffaleuf","sameAs":["http:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=2877"}],"version-history":[{"count":38,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2877\/revisions"}],"predecessor-version":[{"id":2945,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2877\/revisions\/2945"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7909"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=2877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=2877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=2877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}