0

将 TSQL 放在数据库中是一个坏主意吗?例如,请参阅下面的 DDL:

CREATE TABLE dbSystems (ID INT NOT NULL IDENTITY, Description VARCHAR(100), SQL (10000))
INSERT INTO dbSystems ('Sales System', 'DECLARE SalesVariable int..............")
INSERT INTO dbSystems ('Finance System', 'DECLARE FinanceVariable int..............")
INSERT INTO dbSystems ('Production System', 'DECLARE ProductionVariable int..............")

VB.NET 应用程序将能够选择在运行时运行的 SQL。

或者,在 SQL 字段中,我可以包含存储过程的名称,而 VB.NET 应用程序可以执行该存储过程。

4

2 回答 2

1

这是一个好主意,Microsoft 已经为您实现了它,作为存储过程。看看sys.all_sql_modules

object_id   
int     
ID of the object of the containing object. Is unique within a database.

definition  
nvarchar(max)   
SQL text that defines this module. 

您的应用程序需要提供的只是要执行的存储过程的名称,SQL Server 将查找该 SQL 并执行它。

于 2013-09-09T14:08:49.703 回答
1

我在一些项目中也使用了这种策略。如果用户不能更改数据库中的 SQL 语法,我看不出有什么安全问题。如果他们这样做,您必须在使用 SQL 之前对其进行评估。

此外,如果查询中的某些参数对于不同的行是不同的,您可以只存储这些参数并在存储过程中运行它们,或者从这些值创建动态 SQL。

我用它来收集数据并将其传输到另一种数据格式。源数据以非常不同的数据格式和数据库设计存储。目标格式始终是相同的 EAV 模型。

我将存储的 SQL 用作整个 SQL 语句的一部分,用于传输一批一天数据的数据。

由于我不希望存储过程会随着时间的推移而增加,因此我选择了此选项。

此外,我还想存储每批数据使用的 SQL 语句的历史记录,以供将来更改 SQL 语句时参考。

使用 SP 的选项仍然可行,尽管我现在不知道如何存储随时间使用的 SQL 语句的历史记录。

于 2013-09-09T13:57:15.597 回答