将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应用程序可以执行存储过程。
答案 0 :(得分:1)
我在某些项目中也使用这种策略。 如果用户无法更改数据库中的SQL语法,我看不到太多安全问题。 如果他们这样做,你必须在使用之前评估SQL。
此外,如果查询中的某些参数对于不同的行是不同的,您可以只存储它们并在存储过程中运行它们,或者从值创建动态SQL。
我用它来收集数据并将数据传输到另一种数据格式。源数据以非常不同的数据格式和数据库设计存储。目标格式始终是相同的EAV模型。
我使用存储的SQL作为整个SQL语句的一部分,该语句传输一批一天数据的数据。
由于我不希望存储过程的混乱随着时间的推移会增加,所以我选择了这个选项。
另外,我想存储每批数据使用的SQL语句的历史记录,以供将来在我更改SQL语句时参考。
使用SP的选项仍然可行,尽管我现在还不知道如何存储随时间推移使用的SQL语句的历史记录。
答案 1 :(得分:1)
这是一个好主意,微软已经为你实现了它作为存储过程。看看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并执行它。