sqlserver 動(dòng)態(tài)創(chuàng)建臨時(shí)表的語(yǔ)句分享
更新時(shí)間:2012年01月20日 20:12:11 作者:
開發(fā)業(yè)務(wù)需求,需要對(duì)一個(gè)表作數(shù)據(jù)分析,由于數(shù)據(jù)量較大,而且分析時(shí)字段會(huì)隨條件相應(yīng)變化而變化
因此計(jì)劃先把數(shù)據(jù)轉(zhuǎn)插入一個(gè)臨時(shí)表,再對(duì)臨時(shí)表的數(shù)據(jù)進(jìn)行分析。
問題點(diǎn)是如何動(dòng)態(tài)創(chuàng)建臨時(shí)表。原先Insus.NET使用下面代碼實(shí)現(xiàn):
DECLARE @s NVARCHAR(MAX) = '
IF OBJECT_ID(''[dbo].[#Tb]'') IS NOT NULL
DROP TABLE [dbo].[#Tb]
CREATE TABLE [dbo].[#Tb]
(
[xxx] INT,
[xxx] NVARCHAR(50),
'+ [dbo].[Column]() + '
)'
EXECUTE(@s)
上面代碼中,有一個(gè)函數(shù)[dbo].[Column]() 是取得一系列動(dòng)態(tài)字段。
其實(shí),上面的代碼一點(diǎn)問題也沒有,是能正確動(dòng)態(tài)創(chuàng)建一個(gè)臨時(shí)表,但是接下來代碼,我們無法再使用這個(gè)臨時(shí)表[dbo].[#Tb] ,因?yàn)閞un第10行代碼EXECUTE(@s)這動(dòng)作之后,進(jìn)程已經(jīng)結(jié)束了。這樣說法,動(dòng)態(tài)創(chuàng)建出來的臨時(shí)表,也沒有什么意義了。
為了解決這個(gè)問題,Insus.NET想到了一個(gè)方法,算是能解決這個(gè)問題。既能動(dòng)態(tài)創(chuàng)建,又能在創(chuàng)建之后,能繼續(xù)使用這個(gè)臨時(shí)表。
IF OBJECT_ID('[dbo].[#Tb]') IS NOT NULL
DROP TABLE [dbo].[#Tb]
CREATE TABLE [dbo].[#Tb]
(
[xxx] INT,
[xxx] NVARCHAR(50)
)
DECLARE @tb NVARCHAR(MAX) = 'ALTER TABLE [dbo].[#Tb] ADD ' + [dbo].[Column]()
EXECUTE(@tb)
只要細(xì)心看了一下,就是可以知道,可以先按正常創(chuàng)建這個(gè)臨時(shí)表,再動(dòng)態(tài)修改這個(gè)臨時(shí)表的字段。這樣做之后,程序run完第10行代碼之后,就能再繼續(xù)使用這個(gè)臨時(shí)表,如:
SELECT * FROM [dbo].[#Tb]
問題點(diǎn)是如何動(dòng)態(tài)創(chuàng)建臨時(shí)表。原先Insus.NET使用下面代碼實(shí)現(xiàn):
復(fù)制代碼 代碼如下:
DECLARE @s NVARCHAR(MAX) = '
IF OBJECT_ID(''[dbo].[#Tb]'') IS NOT NULL
DROP TABLE [dbo].[#Tb]
CREATE TABLE [dbo].[#Tb]
(
[xxx] INT,
[xxx] NVARCHAR(50),
'+ [dbo].[Column]() + '
)'
EXECUTE(@s)
上面代碼中,有一個(gè)函數(shù)[dbo].[Column]() 是取得一系列動(dòng)態(tài)字段。
其實(shí),上面的代碼一點(diǎn)問題也沒有,是能正確動(dòng)態(tài)創(chuàng)建一個(gè)臨時(shí)表,但是接下來代碼,我們無法再使用這個(gè)臨時(shí)表[dbo].[#Tb] ,因?yàn)閞un第10行代碼EXECUTE(@s)這動(dòng)作之后,進(jìn)程已經(jīng)結(jié)束了。這樣說法,動(dòng)態(tài)創(chuàng)建出來的臨時(shí)表,也沒有什么意義了。
為了解決這個(gè)問題,Insus.NET想到了一個(gè)方法,算是能解決這個(gè)問題。既能動(dòng)態(tài)創(chuàng)建,又能在創(chuàng)建之后,能繼續(xù)使用這個(gè)臨時(shí)表。
復(fù)制代碼 代碼如下:
IF OBJECT_ID('[dbo].[#Tb]') IS NOT NULL
DROP TABLE [dbo].[#Tb]
CREATE TABLE [dbo].[#Tb]
(
[xxx] INT,
[xxx] NVARCHAR(50)
)
DECLARE @tb NVARCHAR(MAX) = 'ALTER TABLE [dbo].[#Tb] ADD ' + [dbo].[Column]()
EXECUTE(@tb)
只要細(xì)心看了一下,就是可以知道,可以先按正常創(chuàng)建這個(gè)臨時(shí)表,再動(dòng)態(tài)修改這個(gè)臨時(shí)表的字段。這樣做之后,程序run完第10行代碼之后,就能再繼續(xù)使用這個(gè)臨時(shí)表,如:
SELECT * FROM [dbo].[#Tb]
您可能感興趣的文章:
- 用非動(dòng)態(tài)SQL Server SQL語(yǔ)句來對(duì)動(dòng)態(tài)查詢進(jìn)行執(zhí)行
- SQL SERVER 中構(gòu)建執(zhí)行動(dòng)態(tài)SQL語(yǔ)句的方法
- 分享一下SQL Server執(zhí)行動(dòng)態(tài)SQL的正確方式
- sql server動(dòng)態(tài)存儲(chǔ)過程按日期保存數(shù)據(jù)示例
- asp.net Menu控件+SQLServer實(shí)現(xiàn)動(dòng)態(tài)多級(jí)菜單
- sqlserver 存儲(chǔ)過程動(dòng)態(tài)參數(shù)調(diào)用實(shí)現(xiàn)代碼
- sqlserver 支持定位當(dāng)前頁(yè),自定義排序的分頁(yè)SQL(拒絕動(dòng)態(tài)SQL)
- SQL Server中執(zhí)行動(dòng)態(tài)SQL
相關(guān)文章
使用SQL SERVER存儲(chǔ)過程實(shí)現(xiàn)歷史數(shù)據(jù)遷移方式
這篇文章主要介紹了使用SQL SERVER存儲(chǔ)過程實(shí)現(xiàn)歷史數(shù)據(jù)遷移,介紹了歷史數(shù)據(jù)遷移的基本概念及目的,對(duì)SQL SERVER存儲(chǔ)過程歷史數(shù)據(jù)遷移知識(shí)感興趣的朋友參考下吧2021-09-09
SQLSERVER Pager store procedure分頁(yè)存儲(chǔ)過程
SQL SERVER(2005)以上版本可用,相對(duì)應(yīng)的頁(yè)面邏輯中寫的對(duì)應(yīng)調(diào)用該存儲(chǔ)過程的方法2010-06-06
SQL Server簡(jiǎn)單模式下誤刪除堆表記錄恢復(fù)方法(繞過頁(yè)眉校驗(yàn))
這篇主旨是揭示堆表的刪除記錄找回的原理,我所考慮的方面并不適用于每個(gè)人的每種情況,望大家見諒2013-01-01
SQLServer 數(shù)據(jù)庫(kù)故障修復(fù)頂級(jí)技巧之一
SQL Server 2005 和 2008 有幾個(gè)關(guān)于高可用性的選項(xiàng),如日志傳輸、副本和數(shù)據(jù)庫(kù)鏡像。2010-04-04
MSSQL轉(zhuǎn)MYSQL,gb2312轉(zhuǎn)utf-8無亂碼解決方法
MSSQL轉(zhuǎn)MYSQL,gb2312轉(zhuǎn)utf-8無亂碼解決方法,需要的朋友可以參考下。2010-06-06
萬能密碼的SQL注入漏洞其PHP環(huán)境搭建及防御手段
這篇文章主要介紹了萬能密碼的SQL注入漏洞其PHP環(huán)境搭建及防御手段,對(duì)此感興趣的小伙伴趕快收藏起來吧2021-09-09

