sql存儲過程創建臨時表
把你所有涉及的表自段發上來
你這樣怎麼給你寫啊
ha是哪個表的自段啊
需求明確了給你寫
才20分也太少了吧
這個工作量可不小哦
想當初我給人寫這么左右的存儲過程
拿了500塊人民幣呢呢
呵呵!
建立臨時表只是在表的前面加一個#,其它都輿建立實表相同,建立過程我相信你都知道了,就不用我多說了
Egg:
create
table
#temp
(id
int,
name
varchar(50)
)
B. 怎麼在sql server存儲過程中創建列名不確定的臨時表
方法1:
select * into #temp from table1
方法2:
創建一個臨時表包含ScanTime,[CSI-10-01-N],[VAD-05-02-B]三列,只是寫數據進去的時候沒有數據的就填空,也就是說創建一個大而全的臨時表
C. SQL存儲過程中如何插入使用臨時表
在存儲過程中 是不可以創建臨時表的...
建議使用表變數代替臨時表進行操作 或者在存儲過程外面建好臨時表
祝你好運
D. sql如何創建臨時表
網上其實很多相關文章,你可以搜一下,並不一定需要在這里提問。
轉帖一篇給你吧
drop table #Tmp --刪除臨時表#Tmp
create table #Tmp --創建臨時表#Tmp
(
ID int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
WokNo varchar(50),
primary key (ID) --定義ID為臨時表#Tmp的主鍵
);
Select * from #Tmp --查詢臨時表的數據
truncate table #Tmp --清空臨時表的所有數據和約束
相關例子:
Declare @Wokno Varchar(500) --用來記錄職工號
Declare @Str NVarchar(4000) --用來存放查詢語句
Declare @Count int --求出總記錄數
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i < @Count
Begin
Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
Select @WokNo,@i --一行一行把職工號顯示出來
Set @i = @i + 1
End
臨時表
可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。
SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL
Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由
CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過
116 個字元。
除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。
在
存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪
個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所
創建的表,例如:
CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO
下面是結果集:
(1 row(s) affected)
Test1Col
-----------
1
(1 row(s) affected)
Test2Col
-----------
2
當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定
FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN
KEY 約束中不能引用臨時表。
考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。
E. 關於在存儲過程中建立臨時表
你試過了嗎?
這樣建是允許的!!不過這樣建的表屬於本地臨時表。當存儲過程完成時,將自動刪除在存儲過程中創建的本地臨時表。
可能是被刪了你沒看到
--------
CREATE
PROCEDURE
dbo.Test2
AS
CREATE
TABLE
#t(x
INT
PRIMARY
KEY);
INSERT
INTO
#t
VALUES
(2);
SELECT
Test2Col
=
x
FROM
#t;
GO
CREATE
PROCEDURE
dbo.Test1
AS
CREATE
TABLE
#t(x
INT
PRIMARY
KEY);
INSERT
INTO
#t
VALUES
(1);
SELECT
Test1Col
=
x
FROM
#t;
EXEC
Test2;
GO
CREATE
TABLE
#t(x
INT
PRIMARY
KEY);
INSERT
INTO
#t
VALUES
(99);
GO
EXEC
Test1;
GO
這是個例子你可以運行了看看結果!!
F. 存儲過程中的臨時表是怎麼生成的
不知道樓主的需求如何一般沒必要創建臨時表,處理數據後又它drop。存儲過程中要用到的表應該會經常用到。就讓它存在吧,用完用 truncate table 清理數據就可以了。空表不會占很多資源。 我們就是這樣做的。
G. sql 存儲過程裡面創建臨時表怎麼不能查看
臨時表
是在一次會話(session)中有效的,退出即自動刪除。
因此,你要查看臨時表的數據的話:
》方法1、在存貯過程中SELECT
》方法2、使用全局臨時表(##表名),然後外面可以看
--
但要注意及時清理,否則再次執行過程會報錯(表已經存在)
H. 如何在SQL Server中創建全局臨時表
全局臨時表的生命周期一直持續到創建會話(不是創建級別)才終止。例如,如果你在存儲過程中創建全局臨時表,當超出存儲過程的范圍時,該表並不會被銷毀。當創建會話終止後,Sql Server才會自動嘗試刪除該表,其他會話中對其提交的所有語句都將結束,並釋放它們所保持的所有鎖。 但在某些情況下,你可能想創建一個不屬於任何會話的全局臨時表。這時,無論哪個會話打開或關閉,它總數存在,只有顯式的刪除它才能被移除。為此,可以在一個特殊的存儲過程中(使用sp_前綴,在master中創建)創建該表並使用「startup」選項標記該存儲過程。Sql Server會在每次啟動時調用啟動過程(startup procere)。而且,Sql Server為啟動過程中創建的全局臨時表維護一個大於0的引用計數器,這樣就確保Sql Server不會嘗試自動刪除它。 如下所示:USE master;GOIF OBJECT_ID('dbo.sp_Globals') IS NOT NULL DROP PROC dbo.sp_GlobalsGOCREATE proc dbo.sp_GlobalsAS
I. sql server 存儲過程 臨時表
可以使用如下方法:
declare
@sql
varchar(2000)
begin
set
@sql='select
*
into
#tmp
from
student'
print
@sql
exec
(@sql)
其中#tmp就是臨時表,整段代碼的意思就是將student表的數據全部插入到#tmp這個臨時表中。
J. SQL Server 中用存儲過程創建臨時表問題
用動態SQL創建
declare @sql varchar(8000)
set @sql = 'create table ' + @temptable + ' (col1 valchar(50) null,col2 valchar(50) null,
col3 valchar(50) null)'
exec(@sql)