2012-03-20 58 views
2

我要創建一個存儲過程來創建表來捕獲表單數據,這是創建表單生成器的較大項目的一部分。用JSON輸入創建表定義的存儲過程

我想知道是否有人創建了一個存儲過程,該存儲過程將字符串化的JSON對象作爲輸入並基於此模式創建表?

我仍然在這個問題上爭論不休,我是否應該在sproc(最好)或者在C#服務中寫動態sql。

+0

由於存儲過程創建語法和語義在sql版本之間變化很大,如果明確聲明sql版本,您有機會獲得答案會更大。 – 2012-03-20 12:38:13

回答

0

就我個人而言,我不會通過將JSON字符串傳遞給存儲過程來解決此問題。但是,如果您希望以此方式執行此操作,則可以將JSON對象直接傳遞給存儲過程,然後如下操作字符串。我提供了代碼來操作表名並根據示例JSON字符串'{TABLENAME:TABLENAME,Fields:{field1:varchar,field2:int}}'創建一個表。然後你必須修改這個以包含基於字符串的字段和數據類型。

CREATE PROCEDURE CreateTableFromJSON 
(
    @JSON  VARCHAR(100) 
) 

AS 

DECLARE @TableName VARCHAR(100) 

SET @TableName = SUBSTRING(@json, CHARINDEX(':', @json)+1, CHARINDEX(',', @json) -CHARINDEX(':', @json)-1) 


DECLARE @SQL VARCHAR(100) 

SET @SQL = 'CREATE TABLE ' + @TableName + ' (ID INT)' 

EXEC(@SQL) 

GO 

EXEC CreateTableFromJSON '{TABLENAME:TABLENAME, Fields: {field1:varchar, field2: int }}'