如何創建一個存儲過程來創建一個表,其結構存儲在另一個表中,當然還有t-sql和sql server?T-SQL如何創建其結構位於另一個表中的表?
回答
T-SQL允許創建使用SELECT * ... INTO
語法的飛行表:
SELECT * INTO TargetTable
FROM SourceTable
-- any false returning condition will do
WHERE 1 = 0
這也可以文筆優美(感謝Deadsheep39
):
SELECT TOP 0 * INTO TargetTable
FROM SourceTable
然而,這將失敗TargetTable已經存在,因此您應該檢查其是否存在:
IF OBJECT_ID('TheSchema.TargetTable') IS NOT NULL
DROP TABLE TargetTable
另外,不會創建索引,約束或觸發器。檢查here瞭解更多詳情。
如果你想要去的動態(表名是參數),您可以創建並執行動態查詢:
CREATE PROCEDURE dbo.GenerateTable
(
@SourceTable VARCHAR(128),
@TargetTable VARCHAR(128)
)
AS
BEGIN
DECLARE @SQL NVARCHAR(4000) = N'
SELECT * INTO ' + QUOTENAME(@TargetTable) + '
FROM ' + QUOTENAME(@SourceTable) + '
-- any false returning condition will do
WHERE 1 = 0'
EXEC (@SQL)
END
GO
檢查是否存在可以通過系統函數簡化** object_id ** - '如果object_id('dbname.schema.tablename')不爲null drop table dbname.schema.tablename'或者如果您只使用默認模式如果object_id('tempdb ..#tablename')不是null drop table tempdb ..#tablename',則表示object_id('tablename')不爲null drop table tablename'或tempdb上的示例。 – Deadsheep39
@ Deadsheep39 - 我按照你的建議簡化了對象存在檢查。謝謝。 – Alexei
您可以使用CREATE TABLE
語句將查詢構造爲字符串,並使用sp_executesql
存儲過程執行它。
例如以這種方式:
DECLARE @query nvarchar(max) = N'CREATE TABLE Table(Col nvarchar(50) NULL)'
EXECUTE sp_executesql @query
凡在@query
變量,你可以建立一個基於你需要什麼樣的表。
因此,基本上,您可以用比所需的更困難的方式執行create table語句,輸入必須手動定義?對於OP來說不是一個好的答案,-1。 – Tobb
據我瞭解,問題是如何動態創建一個表,它的結構存儲在另一個表中。 –
是的,您可以使用SELECT INTO,但在問題中沒有指定什麼樣的新表結構。只有在後面的評論「耶列,將用於填補新表」columbums「 –
- 1. 創建另一個表的結構表無數據
- 2. 如何創建另一個列表中的一個列表?
- 3. postgresql從另一個表中的另一個表創建表
- 4. 如何將一個數據庫的一個表設計結構用於另一個數據庫表結構
- 5. Mysql:擴展一個表結構與另一個表結構
- 6. 試圖創建一個結構列表
- 7. 如何創建一個列表,其中的項目可以拖放到另一個列表中以創建組?
- 8. 在TSQL中,我可以創建一個UDF,其中包含一個表的行?
- 9. 查詢多個表中TSQL,其中表名來自另一個表
- 10. 如何創建一個觸發器,用於在另一個表中插入數據時創建表中的列
- 11. iPhone:創建一個基於層次結構的表導航
- 12. 如何從架構創建一個表
- 13. DynamoDB:如何創建一個嵌套JSON結構的表?
- 14. 基於另一個列表內容創建列表的列表
- 15. 如何使用TSQL創建一個簡單的兩表模式?
- 16. 創建一個臨時表,其中的行等於一個數
- 17. 用Mysql查詢來複製表的結構來創建另一個表
- 18. 如何創建結構數組,其中結構的最後一個元素是一個結構破解
- 19. haskell如何從另一個列表創建一個新列表?
- 20. 如何從另一個列表創建一個嵌套列表?
- 21. 如何創建一個標題欄,其中一些文字位於左側,另一些位於右側?
- 22. 其值從另一個表創建MYSQL/Navicat的列表
- 23. 如何創建member_follower表結構?
- 24. 創建另一個結構的含結構領域
- 25. 如何創建一個包含HTML表單,結構化文本
- 26. 如何在另一個表格列中創建表格?
- 27. 如何在另一個表達式中創建表達式?
- 28. 如何鎖定表並在mysql中創建另一個表
- 29. 如何用mysql中現有的表結構創建表?
- 30. 如何從現有的另一個相同結構表中花
什麼是存儲在另一個表?結構像information_schema.columns或者你想重複表結構?要複製結構,使用'select top 0 * into newtable from ...'。 – Deadsheep39
耶列,將要用來填補新表的柱子! – Ayoubleb