一个sqlserver的存储过程的问题

2024-12-23 11:11:05
推荐回答(3个)
回答1:

--楼主的语句语法是没问题的

--只是楼主 不太清楚函数str的用法
--过程我帮你改下 然后 “但是数据表却没有创建出来” 你这句话 可以判断 你只是编译 没有运行
---运行 是会报错的 编译能成功(因为语法没有问题)
alter proc newproc1
@i int,
@name varchar(10)
as
set @i=1
while @i<=5
begin
set @name='test'+str(@i,1,0)
exec('create table '+@name+' (id int not null,name varchar(10))')
set @i=@i+1
end
--下面说一下str函数的用法
str可以只有一个参数 select str(1) --不指定长度和小数位数 就默认小数位数是0 长度是10 不够
--就在前面补空格 所以你的上面的str(@i,3,0) @i是一位数字 所以前面会有两个空格 所以才会
--报错
str可以只有有两个参数 select str(23,2) 第二个参数代表长度 这个长度一定要比第一个长度长或相等 否则就是结果是一串*****
第3个参数是小数位数 这个好理解 有什么不明白的可以随时问我 希望采纳
楼主执行存储过程 可以执行:newproc1 1,''

回答2:

正如ls所说,str作为字符转换是有弊端的,建议采用convert(varchar,@i)
或者cast(@i as varchar)进行类型转换

回答3:

str(@i,3,0)这句将@i转化为带有空格的数字,导致@name可能是 'test 1','test 2'这样的名字,中间带有空格。
如果这种表名是你的预期,那么只要将表名加方括号[]就可以了。
exec('create table ['+@name+'] (id int not null,name varchar(10))')