我有一個數據驅動的網站與許多存儲過程。我想最終能夠做的就是這樣說:SQL Server存儲過程 - 基於變量名稱更新列。
For Each @variable in sproc inputs
UPDATE @TableName SET @variable.toString = @variable
Next
我希望它能夠接受任意數量的參數。
它基本上遍歷所有輸入,並用變量的值更新列的名稱 - 例如列「Name」將更新爲@Name的值。我想基本上有一個存儲過程進行更新,一個用於創建。不過要做到這一點,我需要能夠將變量的實際名稱而不是值轉換爲字符串。
問題1:在T-SQL中可以這樣做嗎?如果是這樣的話?
問題2:使用類似這樣的東西(比如性能或CPU使用率)有什麼主要缺點嗎?
我知道如果一個值是無效的,那麼它只會阻止涉及該變量和後續任何更新的更新,但所有數據都會在vb.net代碼中進行驗證,因此在提交到數據庫時始終有效,我將確保只有列存在的變量才能被提交。
很多感謝,
問候,
理查德·克拉克
編輯:
我知道如何使用SQL字符串和SQL注入攻擊的風險 - 我這個研究了一下在幾個星期前我的論文。
基本上網站使用面向對象的體系結構。有許多類 - 例如Product - 它有很多「Attributes」(我創建了自己的名爲Attribute的類,它具有諸如DataField,Name和Value等屬性,其中DataField用於獲取或更新數據,Name則顯示在管理中前端創建或更新產品時,可能顯示在客戶前端的Value由管理員設置。DataField是我將在「UPDATE Blah SET @Field = @Value」中使用的字段。
我知道這可能是令人困惑的,但它的解釋真的很複雜 - 我對頭腦中的整個系統有很好的理解,但我不能很容易地把它寫進文字。
基本上建立這樣的結構,使得沒有用戶將能夠更改DataField o的值r名稱,但它們可以更改值。我認爲如果我使用動態參數化的SQL字符串,那麼就不會有SQL注入攻擊的風險。
我的意思是通過所有的屬性基本上循環,使其結束了,如:
UPDATE Products SET [Name] = '@Name', Description = '@Description', Display = @Display
然後遍歷一次的所有屬性,並添加參數值 - 這將有同樣的效果,使用存儲過程,對??
我不介意增加頁面加載時間,因爲這主要影響到管理前端,並且會對客戶前端產生一定的影響。
敢問我爲什麼要這樣做? – 2010-05-24 19:34:02
我想這樣做是爲了能夠向管理前端的產品添加屬性。我基本上有一個名爲ProductManager的「管理器」類中的Product,例如Product。 ProductManager繼承自Manager,它循環遍歷Products表中的所有行,並在創建時爲每個行創建Product的實例,並提供正確的詳細信息。我想擴展這個,以便管理員能夠添加一個屬性,然後他們可以在客戶前端使用。不幸的是,這意味着每次更改sprocs .. – ClarkeyBoy 2010-05-25 11:04:12