[英]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.