開發業務需求,需要對乙個表作資料分析,由於資料量較大,而且分析時字段會隨條件相應變化而變化。
因此計畫先把資料轉插入乙個臨時表,再對臨時表的資料進行分析。
問題點是如何動態建立臨時表。原先insus.net使用下面**實現:
1declare
@snvarchar(
max)
='2if object_id(
''[dbo].[#tb]
'') is not null
3drop table [dbo].[#tb]
4create table [dbo].[#tb]
5(
6[***] int,
7[***] nvarchar(50),8'
+[dbo].
[column
]()
+'9)'
10execute(
@s)
上面**中,有乙個函式[dbo].[column]() 是取得一系列動態字段。
其實,上面的**一點問題也沒有,是能正確動態建立乙個臨時表,但是接下來**,我們無法再使用這個臨時表[dbo].[#tb] ,因為run第10行**execute(@s)這動作之後,程序已經結束了。這樣說法,動態建立出來的臨時表,也沒有什麼意義了。
為了解決這個問題,insus.net想到了乙個方法,算是能解決這個問題。既能動態建立,又能在建立之後,能繼續使用這個臨時表。
object_id(
'[dbo].[#tb]
') is
notnull
2drop
table
[dbo
]. [
#tb]
3create
table
[dbo
]. [
#tb]
4 (
5[***]
int,
6[***]
nvarchar(
50)7 )
89declare
@tbnvarchar(
max)
='alter table [dbo].[#tb] add '+
[dbo
]. [
column
]()
10execute(
@tb)
只要細心看了一下,就是可以知道,可以先按正常建立這個臨時表,再動態修改這個臨時表的字段。這樣做之後,程式run完第10行**之後,就能再繼續使用這個臨時表,如:
select
*from
[dbo
]. [
#tb]
動態建立臨時表,根據變數動態命名臨時表表名
create proc up createtmptable14 id int aswhile id 3 begin declare sql varchar 8000 select sql select sql select into t1 cast id as varchar 10 from db ...
mysql 創表 mssql 建立mssql表
sql server 不能修改表結構 列型別 解決方法 在sql server中使用表結構設計的時候 提示是 不允許儲存更改。您所做的更改要求刪除並重新建立以下表。您對無法重新建立的標進行了更改或者啟用了 阻止儲存要求重新建立表的更改 選項。解決方案 啟動mssql server 2008,選擇選單...
Oracle 建立臨時表
oracle 儲存過程中不像sqlserver 中 在儲存過程中用 就可以建立臨時表,用來快取需要處理的資料。oracle主要需要物理建立臨時表結構,用到global temporary table 關鍵字。語法如下 create table create global temporary tabl...