日期:2014-05-18  浏览次数:20622 次

新手发帖,关于语法和结构
因为对最后执行的Update语句不是很有信心,所以要创建表,并向表中插入数据。想把这些动作放到存储过程中,一旦Update没明白可以通过执行存储过程让表以及表中的数据恢复到Update之前的状态。
但实际写的时候消息框里一串串红字,纠结,帮忙看一下
SQL code

if object_id('ChuShiHua') is not null Drop procedure ChuShiHua
Create procedure ChuShiHua
as
begin
    if Object_ID('SK_Silk') is not null Drop table SK_Silk
    Create Table SK_Silk
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )
    go
    Insert into SK_Silk
    Select 11,'aaa','b' union
    Select 7,'a1a','1' union
    Select 14,'3aa','5' union
    Select 55,'a5','6'
    go


    if Object_ID('_OnOffline') is not null Drop table _OnOffline
    Create Table _OnOffline
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )
    go
    Insert into _OnOffline
    Select 14,'aaa','b' union
    Select 7,'at','1' union
    Select 11,'3ya','5' union
    Select 7,'a77','6'
    go


    if Object_ID('_User') is not null Drop table _User
    Create Table _User
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )
    go
    Insert into _User
    Select 14,'a0a','b' union
    Select 9,'at','1' union
    Select 11,'3ya','5' union
    Select 12,'a77','6'
    go

    sp_rename '[SK_Silk].cardID','charId','COLUMN'
    go
    sp_rename '[_OnOffline].cardID','charId','COLUMN'
    go
    sp_rename '[_User].cardID','charId','COLUMN'
    go
    Select * from SK_Silk
    Select * from _OnOffline
    Select * from _User
    go
end
go




执行后消息框提示:
消息 111,级别 15,状态 1,过程 ChuShiHua,第 5 行
'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
消息 102,级别 15,状态 1,过程 ChuShiHua,第 11 行
')' 附近有语法错误。

(4 行受影响)

(4 行受影响)

(4 行受影响)
消息 15248,级别 11,状态 1,过程 sp_rename,第 213 行
参数 @objname 不明确或所声明的 @objtype (COLUMN)有误。
注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。
注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。

(36 行受影响)

(4 行受影响)

(4 行受影响)
消息 102,级别 15,状态 1,第 1 行
'end' 附近有语法错误。


另外虽然有错,存储过程执行后
SQL code

sp_helptext ChuShiHua
go


结果显示为:

Text
---------------------------------------------------------------------------------------------------------------
Create procedure ChuShiHua
as
if Object_ID('SK_Silk') is not null Drop table SK_Silk
Create Table SK_Silk
(
silk_own int,
cardID varchar(50),
cStatus varchar(50)
)



我的后半截跑哪里去了,不是用了Begin...end吗。

相当纠结+无比惆怅...

------解决方案--------------------
存储过程中不能go


SQL code

if object_id('ChuShiHua') is not null Drop procedure ChuShiHua
GO

Create procedure ChuShiHua
as
begin
    if Object_ID('SK_Silk') is not null Drop table SK_Silk
    Create Table SK_Silk
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )

    Insert into SK_Silk
    Select 11,'aaa','b' union
    Select 7,'a1a','1' union
    Select 14,'3aa','5' union
    Select 55,'a5','6'


    if Object_ID('_OnOffline') is not null Drop table _OnOffline
    Create Table _OnOffline
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )

    Insert into _OnOffline
    Select 14,'aaa','b' union
    Select 7,'at','1' union
    Select 11,'3ya','5' union
    Select 7,'a77','6'


    if Object_ID('_User') is not null Drop table _User
    Create Table _User
    (
        silk_own int,
        cardID varchar(50),
        cStatus varchar(50)
    )

    Insert into _User
    Select 14,'a0a','b' union
    Select 9,'at','1' union
    Select 11,'3ya','5' union
    Select 12,'a77','6'

    sp_rename '[SK_Silk].cardID