2017-06-22 76 views
0
USE DATABASE 

insert into #Table -- Previously created temp table 
(
    Name 
    Number 
    Date 
) 

select 'Joe', 5, 'January 9th' 
union all select 'Sam', 3, 'January 4th' 
union all select 'Eleanor', 4, 'January 5th' 
union all select 'Joseph', 1, 'January 6th' 

我的問題是什麼用的語句時INSERT INTO選擇不指定範圍「從」,明確表示在數據庫中的哪些表語句中的信息來了從?範圍SQL使用語句和插入進入選擇的

我遇到了插入select語句類似於這個,我很難理解的是,如果數據是在四個select語句中創建的,或者正在搜索並在DATABASE中找到。如果正在搜索Microsoft SQL Server Management Studio如何知道正在引用哪個表?

回答

0

如果沒有FROM子句,則數據不是來自任何數據庫中的任何表。它被硬編碼到INSERT查詢中。如果您問的是如何知道將數據插入到哪個表中,則在INSERT INTO子句中指定,並且在USE語句的上下文中。

我很懷疑你的問題,因爲你插入到一個臨時表中,你的評論爲「以前創建」,臨時表的範圍是一個完全不同的問題。

+0

右上方插入#Table中有一個創建表的語句,該表創建該表。因此,如果沒有from聲明,我的理解是select語句正在這些行上創建數據,然後將它們插入表中,而不是在數據庫中查找這些值 – Zion

+0

是的,您的理解是正確的。爲什麼這樣問?你是否看到一些意想不到的結果或錯誤? –

+0

完整的腳本非常冗長,其中有數百個聯合體都選擇了,然後還有至少100行選擇語句,每個語句都有一個明顯的「from」語句表示值來自哪裏,所以我剛剛被拋出通過看到前幾行選擇了一些內容,但沒有提到它來自哪裏。我是一個有SQL的相對新手,但我的任務是運行應該是「次要」更新的任務。 – Zion

1

以下的所有內容都將在所選數據庫的上下文中運行USE database

在這種情況下,USE一事無成,因爲你的#temp表存儲在tempdb無論你使用是的數據庫,你的選擇是不訪問任何表,因此它會返回硬編碼值不管數據庫上下文。

+0

硬編碼值的返回值是我需要的因此無論在沒有from子句的情況下使用USE語句,insert into select都只會將硬編碼的值放入Table中。 – Zion

+0

@Zion確切地說,也值得注意的是,您可以擁有與「USE」相同的語句你需要的,所有的東西都會在當前使用的數據庫中執行,直到下一個USE語句爲止;另一個選項是你的FROM中的三部分命名,它們是FROM [數據庫]。 ] [表]'。 –