SQLSERVER存储过程开发笔记----零碎问题以及关于操作文件的操作

使用的为sqlserver2017版本

一、xp_cmdshell组件不能用

报错提示:

“ 消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行 SQL Server 阻止了对组件
‘xp_cmdshell’ 的 过程’sys.xp_cmdshell’
的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用
‘xp_cmdshell’。有关启用 ‘xp_cmdshell’ 的详细信息,请参阅 SQL Server 联机丛书中的
“外围应用配置器”. ”

解决方法:

--执行以下语句
EXEC sp_configure 'show advanced options', 1

RECONFIGURE

EXEC sp_configure 'xp_cmdshell', 1

RECONFIGURE

二、判断某个路径下的某个文件是否存在

--判断文件是否存在
declare @errCode varchar(2)
EXEC   @errCode = master..xp_cmdshell 'dir D:\If_paths.txt'
select @errCode --存在的话返回0 不存在返回1

三、判断临时表是否存在

--判断临时表是否存在
declare @sss varchar(10)

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#表名') and type='U')
begin
	set @sss = '存在'
	drop  table #表名 --删除临时表
end
else
begin
	set @sss = '不存在'
end

四、创建临时表并读取执行文件中的数据插入到临时表中(逐行读取)

①只有一列数据
【文档内容】
在这里插入图片描述

【SQL语句】

--创建临时表
declare @cmd varchar(1000)
create table #TEST_TABLE
(
    file_value char(100)
)

--从txt文件中按行读取数据,插入到临时表中
set @cmd ='bulk insert #TEST_TABLE from ''D:\1234.txt'' WITH( FIELDTERMINATOR = ''\t'', ROWTERMINATOR = ''\n'')'
exec (@cmd)

--查询临时表
select * from #TEST_TABLE

【执行结果】
在这里插入图片描述
PS:遇到个问题就是我的 txt文本格式是UTF-8的时候,读取插入表中是乱码:
【文档内容】
在这里插入图片描述
执行结果:
在这里插入图片描述
文本格式改为ANSI的时候读入正常。

②插入多列
文档内容:
在这里插入图片描述
【SQL语句】

--判断临时表是否存在,存在就删除
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#table') and type='U')
begin
    drop  table #table
end
--创建存储过程--后面挪到主存储过程中
create table #table
(
    one		varchar(50),
	two		varchar(50),
	three	varchar(50)
)

--定义需要用到的变量
declare @path varchar(255) = '',
@地址 varchar(100),
@文件名 varchar(100),
@cmd varchar(255)

--变量赋值
set @地址 = 'E:'
set @文件名 = 'wendang.csv'
set @path =@地址  + '\' + @文件名

--执行读取插入
set @cmd ='bulk insert #table from '''+@path + ''' WITH( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'',FIRSTROW  = 2,KEEPNULLS)'
exec (@cmd)

select * from #table

【执行结果】
在这里插入图片描述

五、取指定行的数据

--取第一行数据,并赋值
select top 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦糖丨玛奇朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值