簡體   English   中英

T-SQL如何創建一個結構在另一個表中的表?

[英]T-SQL how to create a table whose structure is in another table?

如何創建一個存儲過程來創建一個表,其結構存儲在另一個表中,當然還有s-sql和sql server?

T-SQL允許使用SELECT * ... INTO語法動態創建表:

SELECT * INTO TargetTable
FROM SourceTable
-- any false returning condition will do
WHERE 1 = 0

這也可以寫Deadsheep39優雅(感謝Deadsheep39 ):

SELECT TOP 0 * INTO TargetTable
FROM SourceTable

但是,如果TargetTable已經存在,這將失敗,因此您應該檢查它的存在:

IF OBJECT_ID('TheSchema.TargetTable') IS NOT NULL
    DROP TABLE TargetTable

此外,不會創建索引,約束或觸發器。 點擊此處了解更多詳情。

如果您想要動態(表名是參數),您可以創建並執行動態查詢:

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

您可以使用CREATE TABLE語句將查詢構造為字符串,並使用sp_executesql存儲過程執行它。

例如這樣:

DECLARE @query nvarchar(max) = N'CREATE TABLE Table(Col nvarchar(50) NULL)'
EXECUTE sp_executesql @query

@query變量中,您可以根據所需的表格來構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM