這是我寫的存儲過程,希望能解決你的問題,~貌似以前回答過類似問題
先要創建一張保存結果的數據表,腳本如下
CREATE TABLE [dbo].[out_data](
[flag] [int] NULL,
[tb_name] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
[insert_info] [varchar](8000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
--然後創建過程
--[out_table_data] 'net_code'
create proc [dbo].[out_table_data]
@tb_name varchar(1000)--表名稱
as
declare @str varchar(8000),--存放欄位名稱
@insert_str varchar(8000),--存放處理結果串
@bl varchar(8000),--存放變數及其數據類型
@bl2 varchar(8000),--存放變數名稱
@bl3 varchar(8000),--數據類型
@bd varchar(1000),--引號使用開始
@bd2 varchar(1000),--引號使用結束
@sum_str varchar(8000),--存放賦值變數和欄位
@sum_str_column varchar(8000),--存放要提取的變數欄位
@j int,--欄位個數
@i int--循環起始量
set @str=''
set @bl='declare '--聲明變數(保留中間的空格)
set @bl2=''
set @bl3=''
set @i=1
set @sum_str=''
set @sum_str_column=''
set @bd='''''''+'
set @bd2='+'''''''
--欄位個數
select @j=count(a.[name]) from syscolumns A inner join sysobjects B
on A.id = B.id and b.name = @tb_name
--自動定義變數放入串@bl中(case when c.[name] in('char','nchar','varchar','nvarchar') then '('+convert(varchar(500),a.length)+')' else '' end)
select @bl=@bl+'@'+a.[name]+' '+'varchar(8000)'+',' ,@bl3=@bl3+c.[name]+',' from syscolumns A inner join sysobjects B on A.id = B.id
inner join systypes c
on A.xtype=C.xusertype
and b.name = @tb_name
set @bl=left(@bl,len(@bl)-1)
--要查詢的表欄位名放入串@str中
select @str=@str+a.[name]+',' ,@bl2=@bl2+'@'+a.[name] from syscolumns A inner join sysobjects B
on A.id = B.id and b.name = @tb_name
set @str=left(@str,len(@str)-1)
set @bl2=@bl2+'@'
while @i<=@j
begin
set @sum_str_column=@sum_str_column+@bd+isnull(left(@bl2,charindex('@',right(@bl2,len(@bl2)-1))),0)+@bd2+','
set @sum_str=@sum_str+left(@bl2,charindex('@',right(@bl2,len(@bl2)-1)))+'='+left(right(@bl2,len(@bl2)-1),charindex('@',right(@bl2,len(@bl2)-1))-1)+','
set @bl2 = right(@bl2,len(@bl2)-charindex('@',right(@bl2,len(@bl2)-1)))
set @bl3=right(@bl3,len(@bl3)-charindex(',',@bl3))
set @i=@i+1
end
set @sum_str=left(@sum_str,len(@sum_str)-1)
set @sum_str_column=left(@sum_str_column,len(@sum_str_column)-1)
--執行處理過程,在臨時表中進行
set @insert_str=' '+@bl+'
declare @max int,@min int
select identity(int,1,1) my_id,'+@str+' into #tmp from '+@tb_name+'
select @min=min(my_id),@max=max(my_id) from #tmp
while @min<=@max
begin
select '+@sum_str+' from #tmp where my_id=@min
insert into out_data(flag,tb_name,insert_info)
select @min [id],'''+@tb_name+''' tb_name,''insert into '+@tb_name+''+'('+@str+') values('+@sum_str_column+')'' names
set @min=@min+1
end'
exec(@insert_str)
--print @insert_str
『貳』 如何導出 sql server2005資料庫中的所有表數據
如果想要inesrt這樣的格式的SQL語句,只能通過一些第三方的軟體,如Database4.exe,這個是免費的,自己可以直接下載使用。
『叄』 關於為什麼SQL2005導出數據表腳本時,會丟失非主鍵索引
導出數據表腳本時是有選項控制需要導出哪些與表有關的項目的,默認設置中未包括導出索引。從SQL Server Management Studio的菜單Tools -> Options... 打開選項設置窗口,找到如下圖的選項,將值由False改成True,再導出數據表腳本時就會有創建索引的腳本了。
『肆』 SQL2005的資料庫能不能導出成sql2000的資料庫!如能怎麼操作
一、SQL2005不能直接導成SQL2000的資料庫,因為SQL的規則是,只能升級,不能降級。你可以將SQL2000備份出的數據在SQL2005中還原,反之則不能。很多軟體都是這樣的,這叫向下兼容。
二、一般來說,SQL2008完全兼容於SQL2000,所以,如果是實際數據伺服器架設的話,在當前,建議使用SQL2008R2,這是一個相對比較成熟與穩定的SQL SERVER版本。
三、如果是個人學習,為了節約個人電腦資源,可能會考慮降級,降級也不是做不到,只是非常非常的麻煩,以下是SQL2008中的做法供參考,SQL2005表面上的操作幾乎與SQL2008完全一樣:
1. 生成for 2000版本的資料庫腳本
2008 的manger studio
-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例
-- 右鍵要轉到2000的庫
-- 任務
-- 生成腳本
-- 在"腳本向導"的"選擇資料庫"中, 確定選擇的是要轉到2000的庫
-- 勾選"為所選資料庫中的所有對象編寫腳本"
-- 在接下來的"選擇腳本選項"中, 將」編寫創建資料庫的腳本」設為True,找到"為伺服器版本編寫腳本"項, 選擇"SQL Server 2000"
-- 其他選項根據需要設置
-- 最後把腳本保存到一個 .sql 腳本文件
2. 在2000中創建目標資料庫
在查詢分析器(或2008的manger studio在打開腳本文件), 連接到SQL Server 2000,執行上面生成的腳本.以創建一個新的資料庫
四、注意,一般上面這種做法只適合於沒有多少數據的資料庫,如果是一個記錄上萬,幾十上百萬的,以這種方法操作,會很難,很容易出問題。
『伍』 sqlserver2005 中的表怎麼生成帶數據的腳本
因為資料庫附加到2005的時候, 資料庫文件已經自動升級到2005, 所以在2000下是無法再附加的(沒有向上兼容的)直接restore或附加是不行的, 用腳本+導數據肯定沒有問題。
2005轉到2000的步驟步驟
1. 生成for 2000版本的資料庫腳本
2005 的manger studio
-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例
-- 右鍵要轉到2000的庫
-- 任務
-- 生成腳本
-- 在"腳本向導"的"選擇資料庫"中, 確定選擇的是要轉到2000的庫
-- 勾選"為所選資料庫中的所有對象編寫腳本"
-- 在接下來的"選擇腳本選項"中, 找到"為伺服器版本編寫腳本"項, 選擇"SQL Server 2000"
-- 其他選項根據需要設置
-- 最後把腳本保存到一個 .sql 腳本文件
2. 在2000中創建目標資料庫
在查詢分析器(或2005的manger studio在打開腳本文件), 連接到SQL Server 2000,執行上面生成的腳本.以創建一個新的資料庫
3. 將數據從2005導到2000
2005 的manger studio
-- 打開"對象資源管理器"(沒有的話按F8), 連接到你的實例
-- 右鍵要轉到2000的庫
-- 任務
-- 導出數據
-- 在"SQL Server 導入和導出向導"的"選擇數據源"步驟中, 確定選擇的是要導出的數 據庫
-- 在"選擇目標"步驟中, 連接到 2000, 並選擇步驟2新建的庫
-- 在"選擇源表和源視圖"中, 選擇所有的表
-- 最後完成
『陸』 SQL Server 2005導出表中數據的SQL腳本形式(即INSERT語句)
假設有個Excel表中的數據要插入到SQL 表tablename,有兩列,第一列uid ,int型,第二列 username, nvarchar(100)型
步驟:
1. 在 Excel 中用公式生成insert語句,假設數據在A和B列, 在C列輸入如下公式
="insert into tablename(uid,username) values(" & a2 & ",N'" & b2 &"')"
往下拉,使得每行都生成一條insert語句
2. 復制這些insert 語句到 SSMS中,執行即可。
『柒』 如何把sql2005資料庫裡面的表裡面的數據導成腳本
一般很少這么做的。如果要轉移數據的話,會用導入導出功能。或者通過excel中轉。需要生成腳本的話,右擊該表就可以。如果你非要把數據做成這樣子,建議通過程序輸出,這樣方便點!
『捌』 SQL2005如何導出表裡面的數據到腳本,看清楚不是sql2008。我怎麼導也只有表結構
05的ssms沒有這功能,好像是08R2才有導出數據的功能吧
你可以單獨下載一個08R2的ssms,或者找找第三方工具