我在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