高分求助,请问一下各位大神这个存储过程怎么保存

jcxpy910 2016-03-17 08:22:30
如下:
DECLARE @StartDate CHAR(7)='2014-01'
DECLARE @EndDate CHAR(7) ='2014-02'
DECLARE @Dates DATETIME = CAST(@StartDate+'-01'AS DATETIME)
DECLARE @CreateTableSql NVARCHAR(4000)

IF OBJECT_ID('tempdb..#Test','U') IS NOT NULL DROP TAbLE #Test
CREATE TABLE #Test
(
Name varchar(7)
)

WHILE @Dates<=CAST(@EndDate+'-01'AS DATETIME)
BEGIN
PRINT CONVERT(varchar(50),@Dates,23)
SET @CreateTableSql = N'ALTER TABLE #Test ADD ['+CONVERT(varchar(50),@Dates,23)+' 周'+Ltrim(DATEPART(weekday,@Dates))+'] VARCHAR(200) NULL'
EXEC (@CreateTableSql)
SET @Dates=DATEADD(Day,1,@Dates)
END

SELECT * FROM #Test




这个可以直接执行,但是没保存在数据库的存储过程中,请问这些语句应该怎么修改呢?
...全文
94 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-03-17
  • 打赏
  • 举报
回复
部分回滚,用临时表处理会被回滚,会把整个临时表回滚掉 比如:
BEGIN TRAN
SELECT 1 AS ID INTO #
	RAISERROR(N'Error',16,1)
IF @@ERROR>0
	BEGIN
		ROLLBACK TRAN
		SELECT * FROM #
	END 
COMMIT TRAN

/*
消息 50000,级别 16,状态 1,第 3 行
Error
消息 208,级别 16,状态 0,第 7 行
对象名 '#' 无效。

*/
卖水果的net 版主 2016-03-17
  • 打赏
  • 举报
回复
使用临时表,可以有效的防止这个存储过程被多个会话同时调用的冲突。
中国风 2016-03-17
  • 打赏
  • 举报
回复
用时注意有个删除实体表的动作

CREATE PROCEDURE P1
AS
DECLARE @StartDate CHAR(7)='2014-01'
DECLARE @EndDate CHAR(7) ='2014-02'
DECLARE @Dates DATETIME = CAST(@StartDate+'-01'AS DATETIME)
DECLARE @CreateTableSql NVARCHAR(4000)
    
IF OBJECT_ID('Test','U') IS NOT NULL DROP TAbLE Test
    CREATE TABLE Test
    (
        Name varchar(7)
    )
    
    WHILE @Dates<=CAST(@EndDate+'-01'AS DATETIME)
    BEGIN
        PRINT CONVERT(varchar(50),@Dates,23)
        SET @CreateTableSql = N'ALTER TABLE Test ADD ['+CONVERT(varchar(50),@Dates,23)+' 周'+Ltrim(DATEPART(weekday,@Dates))+'] VARCHAR(200) NULL'
    EXEC (@CreateTableSql)
        SET @Dates=DATEADD(Day,1,@Dates)
    END
    
SELECT * FROM Test

GO

EXEC P1--调用方法
Ginnnnnnnn 2016-03-17
  • 打赏
  • 举报
回复
保存整个存储过程,用一个 Create Proc Proc1 as 你的语句 go 包起来就可以
jcxpy910 2016-03-17
  • 打赏
  • 举报
回复
@中国风 大神。。。。。。。。。。。。。。。。
jcxpy910 2016-03-17
  • 打赏
  • 举报
回复
我是想把这个存储过程保存下来,去掉#的话,就保存了一张test的表,但是我想调用这个存储过程该怎么办啊
中国风 2016-03-17
  • 打赏
  • 举报
回复
#Test--临时表会话时有效,断连接会清掉 你是保存语句还是保存#Test? 保存#Test时把,#Test改为Test,去掉#,用实体表记录就行

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧