簡體   English   中英

驗證Sql列名稱

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

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