VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 767|回复: 5

如何創建不同名稱的臨時表

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-13 20:30:01 | 显示全部楼层 |阅读模式
如何在sql server裡面的TEMPDB數據庫裡面每次創建不同的表名。

如我程序第一次運行的時候是創建臨時表 tempdb..tmp01
我程序第二次調用運行時,則創tempdb..tmp02這樣,表名不會重復。
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-4-11 22:45:01 | 显示全部楼层
用动态EXEC语句
回复

使用道具 举报

0

主题

23

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-4-12 09:00:01 | 显示全部楼层

动态sql语句基本语法
1 :普通SQL语句可以用Exec执行

eg:   Select * from tableName
         Exec('select * from tableName')
         Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

eg:   
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格

当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s)                -- 成功
exec sp_executesql @s   -- 此句会报错



declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s)                -- 成功     
exec sp_executesql @s   -- 此句正确

3. 输出参数
declare @num int,
        @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?

declare @num int,
               @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num

回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-4-12 19:30:01 | 显示全部楼层
declare @tablename varchar(200)
select @tablename=left('TMP00',5-len(isnull((select cast(right(MAX(name),2) as int)+1 from sysobjects where name like 'tmp%' and type='u'),'1')))
+cast(isnull((select cast(right(MAX(name),2) as int)+1 from sysobjects where name like 'TMP%' and type='U'),1) as char(2))

exec('create table '+@tablename+'(testid int )')
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-6-24 01:15:01 | 显示全部楼层
up,問題解決了。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-18 20:00:02 | 显示全部楼层
declare @tablename varchar(200)
select @tablename=left('TMP0000',7-len(isnull((select cast(right(MAX(name),4) as int)+1  from sysobjects
where name like 'tmp%' and type='u'),'1')))+cast(isnull((select cast(right(MAX(name),4) as int)+1 from sysobjects where name like 'tmp%' and type='U'),1) as char(4))
--print @tablename
exec('create table '+@tablename+'(testid int )')



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表