CREATE PROC SP_BulkInsertFromExcel @fname NVARCHAR(260), @sheename Nvarchar(256), @columnname varchar(2000), @TABLENAME VARCHAR(100) as set nocount on declare @srv_name sysname,@sql nvarchar(4000),@COLUMN VARCHAR(2000),@IDENTITYNAME VARCHAR(100),@SQLWhere varchar(2000) SELECT @COLUMN='',@IDENTITYNAME='',@SQLWhere='',@sql='' SELECT @COLUMN=@COLUMN+','+NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@TABLENAME) AND NAME NOT IN ( SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME=@TABLENAME AND COLUMNPROPERTY( OBJECT_ID(@TABLENAME),COLUMN_NAME,'IsIdentity')=1 ) ORDER BY COLORDER SET @COLUMN=STUFF(@COLUMN,1,1,'') SELECT @SQLWhere=@SQLWhere+' and '+A.NAME+'<>'''' AND ' FROM SYSCOLUMNS A LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID WHERE A.ID=OBJECT_ID(@TABLENAME) AND A.ISNULLABLE!=1 AND ISNULL(E.TEXT,'')='' SET @SQLWhere=stuff(@SQLWhere,1,1,'') SET @SQLWhere=LEFT(@SQLWhere,LEN(@SQLWhere)-3) if @SQLWhere<>'' begin SET @sql=' INSERT INTO '+@TABLENAME+' ( '+@columnname+' ) SELECT '+@columnname+' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1;DATABASE='+@fname+''',['+@sheename+'$]) where 1=1 '+@SQLWhere end else begin SET @sql=' INSERT INTO '+@TABLENAME+' ( '+@columnname+' ) SELECT '+@columnname+' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1;DATABASE='+@fname+''',['+@sheename+'$])' end Exec(@sql) GO