[英]Validate Sql Column Names
我在一個數據庫(不是SQL Server)中有4-5個表。
在我的UI中,用戶可以在文本框中輸入一些SQL條件以及列名。 我需要驗證SQL是否正確以及這些列是否存在,並相應地顯示任何錯誤。 我在服務器端使用C#。
我有一個SQL Server數據庫,其中我們的UI存儲所有與UI相關的信息。
一種方法是在SQL Server中也創建所有這些表(只是表結構),然后查詢每個表的簡單選擇,並相應地顯示錯誤或成功消息。
因此,基本上,我將擁有以下或更多條件的where子句:
where a = b and c in(1,2)
如上所述,我將對SQL Server中創建的每個表執行上述where子句,如果列不存在,則將返回錯誤。
有沒有更好的方法來解決這個問題? 我在考慮是否有其他方法可以在SQL Server上不創建太多表的情況下工作。
我不想對它們進行硬編碼,因為結構可能會在不久的將來發生變化。 因此,正在尋找一些可維護的解決方案。 可以創建一個表並在其中存儲所有這些信息。
任何建議表示贊賞。
在SQL Server中,您可以查詢系統對象:information_schema.columns。
其中包含所有表和視圖的所有列的列表。
但是,我同意之前的評論-您描述的設計是不好的,不好的。
暫時忽略SQL注入問題,如果用戶僅控制查詢的WHERE子句,則可以嘗試運行類似
select top 0 * from <tables> where <user-entered-where-clause>
然后正常處理返回的所有錯誤。
在MS sql服務器中使用dmv函數來驗證查詢字符串。 將用戶字符串分配給變量@Str_query
將@Str_query聲明為nvarchar(max); 設置@Str_query ='SELECT [role_code],[role_description]來自[dbname]。[dbo]。[角色]'SELECT error_message來自sys.dm_exec_describe_first_result_set(@Str_query,NULL,0)WHERE column_ordinal = 0
如果有錯誤消息,則查詢字符串對於執行無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.