如建立了個表是 WoolenDeliveDetail,更新表的存儲過程是UP_WoolenDeliveDetailCREATE PROCEDURE UP_WoolenDeliveDetail @INTUpdateID INT,--為-1 刪除0 修改1新增 @INTDeDetailID INT, @INTDeID INT, @INTColorID INT, @NVD1 NVARCHAR(20), @NVD2 NVARCHAR(20), @NVD3 NVARCHAR(20), @NVD4 NVARCHAR(20), @NVD5 NVARCHAR(20), @NVD6 NVARCHAR(20), @NVD7 NVARCHAR(20), @NVD8 NVARCHAR(20), @NVD9 NVARCHAR(20), @NVD10 NVARCHAR(20) AS IF (@INTUpdateID=0) Begin UPDATE WoolenDeliveDetail SET DeID=@INTDeID,ColorID=@INTColorID, D1=@NVD1,D2=@NVD2,D3=@NVD3,D4=@NVD4,D5=@NVD5,D6=@NVD6, D7=@NVD7,D8=@NVD8,D9=@NVD9,D10=@NVD10 WHERE DeDetailID=@INTDeDetailID End ELSE IF (@INTUpdateID=1) Begin SET @INTDeDetailID=(Select ISNULL(MAX(DeDetailID),0) From WoolenDeliveDetail)+1--取新的ID INSERT INTO WoolenDeliveDetail (DeDetailID,DeID,ColorID, D1,D2,D3,D4,D5,D6,D7,D8,D9,D10 ) VALUES (@INTDeDetailID,@INTDeID,@INTColorID, @NVD1,@NVD2,@NVD3,@NVD4,@NVD5,@NVD6,@NVD7,@NVD8,@NVD9,@NVD10 ) End ELSE DELETE FROM WoolenDeliveDetail WHERE DeDetailID=@INTDeDetailID GO 其他的常規的數據表更新存儲過程與這存儲過程結構差不多。有沒有方法實現,新建一表後,執行一個通用的生成更新數據的存儲過程,後生成該表的更新存儲腳本?? 解決方法: 用下面這個自動生成表的更新數據的存儲過程:CREATE PROCEDURE SP_CreateProcre @TableName nvarchar(50) AS /* 功能: 自動生成表的更新數據的存儲過程如:當建立表MyTable後,執行SP_CreateProcre ,生成表MyTable的數據更新的存儲過程UP_MyTable 設計: OK_008 時間: 2006-05 備註: 1、請在查詢分析器上執行:EXEC SP_CreateProcre TableName 2、由於生成的字元串長度合計很多時候存在>4000以上,所有隻使用Print輸出,再Copy即可。 3、該方法能生成一般表的更新數據的存儲過程,其中更新格式可以根據實際情況修改。 */ DECLARE @strParameter nvarchar(3000) DECLARE @strInsert nvarchar(3000) DECLARE @strUpdate nvarchar(3000) DECLARE @strDelete nvarchar(500) DECLARE @strWhere nvarchar(100) DECLARE @strNewID nvarchar(100) DECLARE @SQL_CreateProc nvarchar(4000) SET @SQL_CreateProc='CREATE PROCEDURE UP_'+@TableName +char(13)+'@INTUpdateID int,'+' /* -1 刪除 0 修改 1新增 */' SET @strParameter='' SET @strInsert='' SET @strUpdate='' SET @strWhere='' DECLARE @TName nvarchar(50),@TypeName nvarchar(50),@TypeLength nvarchar(50),@Colstat bit DECLARE Obj_Cursor CURSOR FOR SELECT * FROM FN_GetObjColInfo(@TableName) OPEN Obj_Cursor FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat WHILE @@FETCH_STATUS=0 BEGIN --構造存儲過程參數部分 SET @strParameter=@strParameter +CHAR(13)+'@'+ @TName +''+@TypeName+','--構造新增數據部分 IF @Colstat=0 SET @strInsert=@strInsert +'@'+ @TName +','--構造更新數據部分 IF (@strWhere='') BEGIN SET @strNewID='SET @'+@TName+'=(Select ISNULL(MAX('+@TName+'),0) From '+@TableName+')+1 --取新的ID' SET @strWhere=' WHERE '+@TName+'='+'@'+@TName END ELSE SET @strUpdate=@strUpdate+@TName+'='+'@'+@TName +','--構造刪除數據部分 FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat END CLOSE Obj_Cursor DEALLOCATE Obj_Cursor SET @strParameter=LEFT(@strParameter,LEN(@strParameter)-1) --去掉最右邊的逗號 SET @strUpdate=LEFT(@strUpdate,LEN(@strUpdate)-1) SET @strInsert=LEFT(@strInsert,LEN(@strInsert)-1) --存儲過程名、參數 PRINT @SQL_CreateProc+@strParameter +CHAR(13)+'AS'--修改PRINT 'IF (@INTUpdateID=0)' PRINT' BEGIN'+CHAR(13) PRINT CHAR(9)+'UPDATE '+@TableName+' SET '+@strUpdate+CHAR(13)+CHAR(9)+@strWhere PRINT ' END'--增加PRINT 'IF (@INTUpdateID=1)' PRINT ' BEGIN' PRINT CHAR(9)+@strNewID PRINT CHAR(9)+'INSERT INTO '+@TableName+' SELECT '+@strInsert PRINT ' END'--刪除PRINT 'ELSE' PRINT ' BEGIN' PRINT CHAR(9)+'DELETE FROM '+@TableName +@strWhere PRINT ' END' PRINT 'GO' GO 其中有的自定義函數FN_GetObjColInfo,代碼如下:/*功能:返回某一表的所有欄位、存儲過程、函數的參數信息設計:OK_008 時間:2006-05*/ CREATE FUNCTION FN_GetObjColInfo (@ObjName varchar(50)) RETURNS @Return_Table TABLE( TName nvarchar(50), TypeName nvarchar(50), TypeLength nvarchar(50), Colstat Bit ) AS BEGIN INSERT @Return_Table select b.name as 欄位名,c.name as 欄位類型,b.length as 欄位長度,b.colstat as 是否自動增長 from sysobjects a inner join syscolumns b on a.id=b.id inner join systypes c on c.xusertype=b.xtype where a.name =@ObjName order by B.ColID RETURN END 經過自己測試,感覺還行。
『貳』 淺談如何在SQL Server中生成腳本
在生成腳本過程中,有很多參數可以選擇,合理的配置這些參數,可以讓我們很方便的按照我們的期望生成腳本。
再後面就是確認生成選項,然後就生成了。
『叄』 如何將資料庫sql server2008中的資料庫生成腳本輸出
Qzone
微信
SQL Server用SQL指令導入文件
華彩繽紛 2016-12-16 09:14
通常情況下,SQL Server要導入Excel文件,我們都是用SQL Server提供的導入工具。但其實SQL Server有更簡單的方法:
1)接受數據導入的表已經存在。
insert into t1 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,
'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$);
2)導入數據並生成表。
select * into t1 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$);
3) 導入Excel中指定的列到資料庫表中指定的列。
INSERT INTO t1(a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET 'MICROSOFT.JET.OLEDB.4.0' ,'Excel5.0; HDR=YES; DATABASE=c:\test.xls',sheet1$);
需要注意:
從「功能外圍應用配置器」中選擇「啟動 OPENROWSET 和 OPENDATASOURCE 支持」選項。
『肆』 怎麼生成SQL腳本
設置資料庫的類型按「Tools」→「GeneratePhysicalDataModel」的順序選擇,如圖設置資料庫類型((1)所示。
在彈出的對話框中的「General」項的DBMS欄中選擇MySQL5.0,如圖設置資料庫類型(2)所示。
設置資料庫類型((1)
設置資料庫類型(2)
設置資料庫類型後就可以進行生成SQL腳本操作,按「Database」→「GenerateDatabase」的順序選擇,如圖生成SQL腳本操作((1)所示。
生成SQL腳本操作((1)
在彈出的對話框中指明生成的腳本存放在哪個目錄下及腳本的名字,最後單擊「確定」按鈕即可生成SQL腳本,如圖生成SQL腳本操作(2)所示。
生成SQL腳本操作(2)
『伍』 如何把SQL資料庫生成腳本 SQL語句
--將表數據生成SQL腳本的存儲過程
CREATEPROCEDUREdbo.UspOutputData
@tablenamesysname
AS
declare@columnvarchar(1000)
declare@columndatavarchar(1000)
declare@sqlvarchar(4000)
declare@xtypetinyint
declare@namesysname
declare@objectIdint
declare@objectnamesysname
declare@identint
setnocounton
set@objectId=object_id(@tablename)
if@objectIdisnull--判斷對象是否存在
begin
print'Theobjectnotexists'
return
end
set@objectname=rtrim(object_name(@objectId))
if@objectnameisnullorcharindex(@objectname,@tablename)=0--此判斷不嚴密
begin
print'objectnotincurrentdatabase'
return
end
ifOBJECTPROPERTY(@objectId,'IsTable')<>1--判斷對象是否是table
begin
print'Theobjectisnottable'
return
end
select@ident=status&0x80fromsyscolumnswhereid=@objectidandstatus&0x80=0x80
if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'ON'
declaresyscolumns_cursorcursor
forselectc.name,[email protected]
opensyscolumns_cursor
set@column=''
set@columndata=''
fetchnextfromsyscolumns_cursorinto@name,@xtype
while@@fetch_status<>-1
begin
if@@fetch_status<>-2
begin
if@xtypenotin(189,34,35,99,98)--timestamp不需處理,image,text,ntext,sql_variant暫時不處理
begin
set@column=@column+casewhenlen(@column)=0then''else','end+@name
set@columndata=@columndata+casewhenlen(@columndata)=0then''else','','','
end
+casewhen@xtypein(167,175)then'''''''''+'+@name+'+'''''''''--varchar,char
when@xtypein(231,239)then'''N''''''+'+@name+'+'''''''''--nvarchar,nchar
when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetime
when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetime
when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifier
else@nameend
end
end
fetchnextfromsyscolumns_cursorinto@name,@xtype
end
closesyscolumns_cursor
deallocatesyscolumns_cursor
set@sql='setnocountonselect''insert'+@tablename+'('+@column+')values(''as''--'','+@columndata+','')''from'+@tablename
print'--'+@sql
exec(@sql)
if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'OFF'
GO
execUspOutputData你的表名
『陸』 資料庫如何生成腳本文件啊,SQL2008
右鍵點擊「資料庫」,在任務中選擇生成腳本
若要單獨生成某類對象(如表、存儲過程),
要將其中「為所選資料庫編寫全部對象」的勾去掉
在高級選項中,可以勾選是否生成所需的其他表的對象,
如索引、觸發器、全文索引等
『柒』 sql server 2008怎麼生成腳本
1.使用SQL Server Management Studio 2008 連接資料庫。 2.選中要導出數據的資料庫節點,點滑鼠右鍵,在菜單中選擇「任務」->「生成腳本 3.在彈出的歡迎界面中,點「下一步」 4.在選擇資料庫界面,選擇對應的資料庫,單擊「下一步」。 5.在「選擇腳本選項」界面中將「編寫數據的腳步」置為true。(注意:版本的選擇要正確,特別是在不同版本間相互使用時尤為重要!),選擇完畢單擊「下一步」。 6.在「選擇對象類型」界面,選擇對應的類型,如:表。單擊「下一步。」 7.在「選擇表」界面,選擇對應的關系表,然後單擊「下一步」。 8.在「輸出選項」界面,選擇對應的輸出模式,如:保存的文件。 9.在「腳本向導摘要」界面,顯示前面的選擇內容,查看即可,然後選擇「完成」。 10.最後,打開保存的腳本文件,下圖是最後生成的SQL腳本: 注意:這里一定要使用SQL Server Management Studio 2008,其它版本不行。
『捌』 如何將Excel中表結構數據自動生成SQL腳本的方法
一: 在本地PC新建一個Excel文件(例如:excel2007)
准備工作,左鍵選擇excel文本左上角的圖標,選擇「Excle選項」。1. 點擊「信任中心」->「信任中心設置」->「宏設置」->選擇「啟用所有宏...」選項。「開發人員宏設置」選項也勾選上。 2. 點擊「信任中心」->「信任中心設置」->選擇「個人信息選項」,將「文檔特定設置」上面默認選擇去掉,避免在保存腳本時報錯。
二: 在本地PC新建一個excel文件(例如: D:\testdate.xlsx)
按快捷鍵「ALT + F11」進入宏編輯,輸入如下代碼後保存。summary()為目標生成代碼,SQL()為生成SQL腳本文件代碼,按條件生成SQL的腳本如下:
Sub summary()
Dim i As Integer
i = 2
ThisWorkbook.Worksheets(1).Columns(2).Clear
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> " " Then
ThisWorkbook.Worksheets(1).Cells(i, 2).Value = sh.Name
ThisWorkbook.Worksheets(1).Cells(i, 2).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
sh.Name + "!A1", TextToDisplay:=sh.Name
i = i + 1
End If
Next sh
ThisWorkbook.Worksheets(1).Cells.Select
With Selection.Font
.Name = "目錄"
.Size = 9
.Strikethrough = False
.Superscript. = False
.Subscript. = False
.OutlineFont = False
.Shadow = False
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
End Sub
Sub SQL()
Dim i As Integer
i = 1
Dim ADO_Stream As Object
Dim strSQL, strDelSQL As String
Dim strTblName As String
Dim col As Long
Dim row As Long
Dim str As String
Dim PK As String
Dim cnt As Integer
PK = "PK"
Dim rowcounts As Long
rowcounts = 0
Dim filecount As Long
filecount = 0
Set ADO_Stream = CreateObject("ADODB.Stream")
ADO_Stream.Type = 2
ADO_Stream.Mode = 3
ADO_Stream.Charset = "unicode"
ADO_Stream.Open
Dim checkType As String
For Each sh In ThisWorkbook.Worksheets
cnt = 0
If sh.Name <> " " And InStr(sh.Name, "template") = 0 Then
strTblName = sh.Cells(1, 2).Value
rowcounts = 1
'Insert SQL
row = 6
Do While sh.Cells(row, 1).Value <> ""
strDelSQL = "delete from " + strTblName + " where "
strSQL = "Insert into " + strTblName + " ("
col = 1
Do While sh.Cells(3, col).Value <> ""
If col <> 1 Then
strSQL = strSQL + ", "
End If
strSQL = strSQL + sh.Cells(3, col).Value
col = col + 1
Loop
strSQL = strSQL + ") VALUES ("
col = 1
Do While sh.Cells(3, col).Value <> ""
str = Trim(CStr(sh.Cells(row, col).Value))
If InStr(Trim(CStr(sh.Cells(2, col).Value)), PK) <> 0 Then
If cnt > 0 Then
strDelSQL = strDelSQL + " and "
End If
strDelSQL = strDelSQL + Trim(CStr(sh.Cells(3, col).Value)) + " = '" + str + "'"
cnt = cnt + 1
End If
If col <> 1 Then
strSQL = strSQL + ", "
End If
If (InStr(Trim(CStr(sh.Cells(4, col).Value)), "Integer") = 0) And (InStr(Trim(CStr(sh.Cells(4, col).Value)), "Decimal") = 0) And ((InStr(Trim(CStr(sh.Cells(4, col).Value)), "DATE") = 0) Or _
((Len(str) > 0) And (InStr(Trim(CStr(sh.Cells(4, col).Value)), "DATE") > 0))) Then
If (Len(str) <= 0) And (InStr(Trim(CStr(sh.Cells(5, col).Value)), "No") = 0) Then
str = "NULL"
ElseIf InStr(Trim(CStr(sh.Cells(4, col).Value)), "DATE") > 0 Then
str = "to_date('" + str + "','yyyy-mm-dd hh24:mi:ss')"
Else
str = "'" + str + "'"
End If
strSQL = strSQL + str
ElseIf (Len(str) <= 0) And (InStr(Trim(CStr(sh.Cells(4, col).Value)), "DATE") > 0) Then
strSQL = strSQL + "NULL"
Else
If (Len(str) <= 0) And (InStr(Trim(CStr(sh.Cells(5, col).Value)), "No") = 0) Then
str = "NULL"
End If
strSQL = strSQL + str
End If
col = col + 1
Loop
strDelSQL = strDelSQL + ";" + vbCrLf
ADO_Stream.WriteText strDelSQL
strSQL = strSQL + ");" + vbCrLf
ADO_Stream.WriteText strSQL
row = row + 1
Loop
End If
i = i + 1
rowcounts = 0
filecount = 0
Next sh
ADO_Stream.SaveToFile ThisWorkbook.Path & "\MstSQL(delete by condition).txt", 2
ADO_Stream.Close
Set ADO_Stream = Nothing
End Sub
點擊「保存」宏腳本,主要的一步完成。
三: 在excel文件(test.xlsx)的首頁創建兩個圖標,分別選擇右鍵指定宏,一個指定上面的summary(),一個指定上面的SQL()。然後就可以在後續的sheet頁創建自己需要生成SQL腳本的表結構名稱了,記得每個sheet頁面對應一個表結構及數據,使用方法如下:
A,將需要更新的對象表數據整個sheet拷進工具中,數據只保留需要更新的數據。
B,在第2行標出主鍵欄位,填上「PK」即可。
看看代碼
http://www.51testing.com/html/41/195041-831346.html
『玖』 關於sql2005生成腳本的問題
sql2005的好像不會自動生成數據
只有表那些
估計你得自己手寫了
我用sql2008可以生成
也很方便
如果需要可以把資料庫給我、我幫你生成下
『拾』 如何生成SQL2012的腳本
我有個笨辦法。先看你的 .MDF 文件是什麼版本的。如果是低版本的,可以先在低版本的sql資料庫附件上,然後在資料庫上右鍵任務-生成腳本,生成整個資料庫所有對象的create sql腳本。然後在sql2012里運行這個腳本,生成sql2012的資料庫。在用VS2010連接資料庫看看。