【问题标题】:Having dynamic sql in my select statement in SQL Server?在 SQL Server 的 select 语句中有动态 sql?
【发布时间】:2013-02-17 05:58:45
【问题描述】:

我有一份动态内容调查问卷,并且我有需要使用 SQL 进行推广的控件?

我试图从表 Questionnaire 中选择并运行存储在下面“PrepopulateContentSQL”列中的 SQL 语句。查询返回单个值。

例如:

Select name from Agency

我的桌子Questionnaire

QuestionID int 
Required bit
Data_Type int
Control_Type int 
Data_Choices nvarchar
Data_Max_Length int  
Question_Group_Id int
Question_Label nvarchar
Question_Order int  
PrepopulateContentSQL nvarchar
PrePopulated bit

我在想也许是一个函数?

Select 
    QuestionID, Required, Control_Type, Data_Choices, 
    GetPrepopulated(PrepopulateContentSQL) As PreValue
From 
    Questionnaire

【问题讨论】:

  • 我读到函数不是最好的解决方案有什么替代方案?
  • 函数并不是不好的解决方案;错误使用的功能是不好的解决方案。
  • @Chaka 。 . .你的问题是什么?出于许多目的,函数正是您想要做的事情的正确解决方案。
  • 如果我把它实现为一个函数,我需要一个例子

标签: sql sql-server stored-procedures dynamic


【解决方案1】:

您确定要存储每次执行的 sql 字符串吗?如果它们像“从代理机构中选择名称”一样简单,我想它们可以很容易地实现为类似宏的系统,您可以在其中预定义许多查询,而预填充列可以简单地保存一个参考.

这将为您提供更多安全性(因为您不再需要过多担心该 sql 的内容),并且可能为您提供自定义 UI 以显示 @AgencyName 而不是“从代理机构中选择名称”的范围

只是一个想法......

【讨论】:

  • 我没有完全按照,你能给我举个例子吗?
  • 好吧,假设您只有 2 个查询用于预填充字段“从机构选择名称”和“从机构选择 last_billed”。通过存储原始 sql,您也可能会面临“从机构中删除 *”的风险......如果您的表有一个“预填充查询 ID”列,您的应用程序只需将这 2 个查询映射到 id 的 1 和 2 并实现视情况而定。
猜你喜欢
  • 1970-01-01
  • 2014-07-10
  • 2017-09-26
  • 2021-01-28
  • 2013-06-14
  • 2018-06-01
  • 1970-01-01
  • 2017-07-06
  • 2015-10-30
相关资源
最近更新 更多