用于MsSql中批量插入的codeigniter存储过程

时间:2016-01-15 07:50:46

标签: php mysql sql-server codeigniter stored-procedures

我在Codeigniter中创建一个系统,我可以使用存储过程将文件(txt& xls)批量插入上传到MsSql,我的问题是我不知道如何使用参数但我的存储过程工作正常,我我需要一些关于如何正确处理我的代码的帮助。

这是我目前的代码:

控制器

function upload_gen048()

{

$data['filedate']=$this->input->post('fiil');


        $this->load->model('navi_model');
        $query = $this->navi_model->upload_gen048($data);
        $this->db->query("call {gen048upload} ");

模型 我认为这是我陷入困境的地方。

function upload_gen048($data)
{


$x = explode('.',$data['fiil']);
//print_r ($data);

$qString = "";
$qString .= '[dbo].[gen048upload] '; //STORED PROCEDURE
$qString .= "'" .$data['fidedate']."'";
echo $qString;

存储过程 我的SP工作正常,但我想考虑一些可以帮助你找出问题的代码。

    ALTER PROCEDURE [dbo].[gen048upload]
(
        @fileDate VARCHAR(20)

)

AS BEGIN

SET NOCOUNT ON

declare @sql varchar(8000),@sourceTable varchar(500), @dynamic varchar(8000), @tablesuffix varchar(10)
select @tablesuffix=upper(substring(datename(m,convert(datetime,@fileDate)),1,3))+convert(varchar,year(convert(datetime,@fileDate)))
print @tablesuffix


 declare @currmonth varchar(10)
 select @dynamic=''

create table #logs(
i int identity(1,1),
tableName varchar(50),
status varchar(30)
)

set @sourceTable ='gen_048_'+@tablesuffix
insert into #logs(tableName,status) select @sourceTable,'CREATED'
IF NOT EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = @sourceTable)
BEGIN
    set @sql = '
    CREATE TABLE '+@sourceTable+'
    (

......
    )
    '   


print @sql
exec (@sql)

SET NOCOUNT ON;
CREATE TABLE #temp (WHOLEROW VARCHAR(8000))

IF OBJECT_ID('tempdb.dbo.#temp') IS NOT NULL
    DROP TABLE #temp

CREATE TABLE #temp1 (WHOLEROW VARCHAR(8000))

BEGIN TRY

    BEGIN TRANSACTION

    DECLARE @SQL2 NVARCHAR(MAX)
    SET @SQL2 = 'BULK INSERT #temp1
    FROM ''Y:\FTP\RMT\' + @fileDate + '.txt' + '''
    WITH (DATAFILETYPE = ''char'', KEEPNULLS, FIRSTROW=1, MAXERRORS=0, ROWTERMINATOR =  ''' + CHAR(0x0A) + ''')'

    EXEC sys.sp_executesql @SQL2

    IF EXISTS (
            SELECT fdate
            FROM gen048_fdate
            WHERE fdate IN (
                    SELECT DISTINCT REPLACE(dbo.fn_Parsename(WHOLEROW, '|', 7), CHAR(9), '')
                    FROM #temp1
                )
        )
    BEGIN

        SELECT 'Error: File Exists, Duplication is not allowed', @fileDate

    END
    ELSE BEGIN

        INSERT INTO gen048_fdate (fdate)
        SELECT DISTINCT REPLACE(dbo.fn_Parsename(WHOLEROW,'|',7), CHAR(9), '')
        FROM #temp1

0 个答案:

没有答案