BEGINTRANSACTION
DECLARE@errorINT,@idINT,@nameNVARCHAR(32)
SET@error=0
INSERTINTO[Table]([name],age)VALUEs('張三',16)
SET@error=@@ERROR
SET@id=@@IDENTITY
SELECT@name=[name]FROM[Table]tWHEREt.id=@id
SET@error=@@ERROR
--第二步,第二步同上
IF@error>0
BEGIN
ROLLBACKTRANSACTION
END
ELSE
BEGIN
COMMITTRANSACTION
END
go
② 編寫一個存儲過程,如何一個存儲過程下有多個表啊。。。。
create procere mypro
as
/*
你上面的內容拷貝下來
*/
go
③ mssql資料庫如何通過sql循環創建表
create procere procerename
@a varchar(100),
@fstr char(500)
as
declare @ftable char(7)
declare @ftempstr char(100)
declare @ftempstr1 char(100)
declare @fflag int
declare @fnum int
declare @flen int
set @fnum=0
set @ftable=(select left(@a,charindex(',',@a)-1))
set @ftempstr=(select right(@a,len(@a)-charindex(',',@a)))
set @ftempstr1=(select @ftempstr)
set @fflag=(select charindex(',',@ftempstr))
while @fnum<2
begin
exec('create table '+@ftable+@fstr)
set @flen=(select charindex(',',@ftempstr1)-1)
if @flen>0
begin
set @ftable=(select left(@ftempstr1,@flen))
end
else
begin
set @ftable=(select left(@ftempstr1,0))
end
set @ftempstr=(select right(rtrim(ltrim(@ftempstr1)),len(@ftempstr1)-charindex(',',@ftempstr1)))
set @ftempstr1=(select @ftempstr)
set @fflag=(select charindex(',',@ftempstr))
if @fflag=0
begin
set @fnum=@fnum+1
end
end
if len(rtrim(ltrim(@ftempstr)))>0
begin
set @ftable=(select rtrim(ltrim(@ftempstr1)))
exec('create table '+@ftable+@fstr)
end
exec procerename 'table1,table2,table3,table4,table5,table6,table7,table8,table9,table10','(a int,
b int,c datetime)'--假設該為已有欄位,不是,請自行修改
④ 資料庫 根據已有表循環創建表的存儲過程
最簡單的方法創建一個表intotable(tablename,pkname)--(表名、鍵名)
利用游標進行循環。
ALTER proc [dbo].[pv](@a varchar(50))
as
--select * from intotable
declare @tablename varchar(50)
declare @pkname varchar(50)
declare @createtable varchar(200)
declare @addpk varchar(200)
---定義游標
declare cr cursor
for select tablename ,pkname from intotable
open cr
fetch from cr into @tablename,@pkname
-------注意此處的@@fetch_status變數,網路就有解釋(0,-1)
while @@fetch_status=0
begin
--------檢驗是否存在表
if exists(select name from sysobjects where type='u' and name='YC'+@a+'_'+@tablename)
begin
exec('drop table YC'+@a+'_'+@tablename)
end
-----------根據已有表創建表和表結構
exec('select * into YC'+@a+'_'+@tablename+' from '+@tablename)
----------添加主鍵
exec('ALTER TABLE YC'+@a+'_'+@tablename+' ADD CONSTRAINT YC'+@a+@tablename+' PRIMARY KEY('+@pkname+')')
fetch next from cr into @tablename,@pkname
end
close cr
deallocate cr
⑤ 向各位高手請教一個問題 ORACLE存儲過程建多個表的問題,執行完後只建成了一個表。。。
有個地方少了個空格,在你連接的時候字元串連接在一起了,oracle識別不出來,第二個vsql
vsql := 'create table '||'ODS_BUSI_CUSTOMER_0'||to_char(sysdate,'yyyymmdd')||
'as select * from sjck.ODS_BUSI_CUSTOMER_775@new_hnstat ';
在
'as select * from sjck.ODS_BUSI_CUSTOMER_775@new_hnstat ';
這行第一個引號前面加個空格
' as select * from sjck.ODS_BUSI_CUSTOMER_775@new_hnstat ';
就行了
那個commit 和rollback可以去掉,沒有用,create是DDL語句,是自動提交的。
⑥ 如何使用一個存儲過程動態更新已有的多表
方法、過程如下:
在每個資料庫的table1\table2都建立插入、刪除、修改觸發器
如在A1上
ceate trigger dbo.table1_u on A1.dbo.table1 for insert,update,delete as
IF @@rowcount = 0 RETURN
declare @no_i int -- 假設no為關鍵字
--declare 其他欄位
declare @no_d int -- 假設no為關鍵字
--declare 其他欄位
--賦值
select @no_i =no ,--其他值
from inserted
select @no_d =no ,--其他值
from deleted
--判斷@no_d,@no_i 是否在A2,A3,A4,A5的表中存在
--1、如果@no_d,@no_i 都存在,則用新值更新A2,A3,A4,A5的talbe1
--2、如果@no_d不存在@no_i存在,則將新值插入A2,A3,A4,A5的talbe1
--3、如果@no_d存在@no_i不存在,則刪除A2,A3,A4,A5的talbe1對應的值
if exists(select 1 from A2.dbo.talbe1 where no = @no_d) and
exists(select 1 from A2.dbo.talbe1 where no = @no_i)
begin
--修改A2資料庫的表
end
⑦ 如何用存儲過程動態創建SQL Server 數據表
你指的是動態創建臨時表吧?可以使用如下的方法(例如):CREATE
TABLE
#MyTempTable
(cola
INT
PRIMARY
KEY)INSERT
INTO
#MyTempTable
VALUES
(1)在表名前面加"#"表示創建臨時表,在程序結束後會自動刪除臨時表,而且每個客戶端實際不是使用同一個臨時表,而且,在程序結束後會自動釋放臨時表。我想你要的應該是這個,對嗎?
⑧ mysql 在存儲過程中創建表格
DELIMITER$$
USE`test`$$
DROPPROCEDUREIFEXISTS`p_create_table`$$
CREATEDEFINER=`root`@`localhost`PROCEDURE`p_create_table`()
BEGIN
DECLAREtableNameVARCHAR(100);
DECLAREtable_nameVARCHAR(100);
DECLAREmonthIntINTDEFAULT1;
DECLAREmonthStrVARCHAR(16);
DECLAREtableHeaderVARCHAR(16);
DECLAREtableBodyVARCHAR(255);
DECLAREdropTableStrVARCHAR(255);
DECLAREsqlStrVARCHAR(1000);
SETtableName=CONCAT('test_',DATE_FORMAT(NOW(),'%Y'));
SETtableHeader='CREATETABLE';
SETtableBody='(`id`INT(11)NOTNULLAUTO_INCREMENT,`name`VARCHAR(10),PRIMARYKEY(`id`))ENGINE=INNODBDEFAULTCHARSET=utf8;';
WHILEmonthInt<=12DO
IFmonthInt<10THEN
SETmonthStr=CONCAT('0',monthInt);
ELSE
SETmonthStr=CONCAT(monthInt);
ENDIF;
SETtable_name=CONCAT(tableName,monthStr);
SETdropTableStr=CONCAT('DROPTABLEIFEXISTS',table_name);
SETsqlStr=CONCAT(tableHeader,table_name,tableBody);
SELECTdropTableStrINTO@dropTableStr;
SELECTsqlStrINTO@sqlStr;
BEGIN
PREPAREstepDropExistTableFROM@dropTableStr;
EXECUTEstepDropExistTable;
PREPAREstepCreateTbaleFROM@sqlStr;
EXECUTEstepCreateTbale;
END;
SETmonthInt=monthInt+1;
ENDWHILE;
END$$
DELIMITER;
⑨ 存儲過程中添加2個表的內容怎麼實現
1:存儲過程中要實現你所要的功能,必要要寫兩個新增語句如:
insert into 表1 values(新帳號)
insert into 表2 values(新帳號)
2:可以再其中一張表上創建一個insert得觸發器,如果在表1新增數據,就在表2也插入一條新增的帳號 如:
create trigger in_sert on 表1
for insert
begin
insert into 表2--欄位欄位要一一對應
select 新帳號 from inserted
end