我知道这个问题以前已经被提出和辩论过了。我读到的答案大多是观点,所以我正在寻找更具技术性的东西。更多的是“引擎盖下”。
我使用的是SQL Server 2008。我将要编写一个至少需要接受11个输入的查询。用户可以指定其中的1到11个(+)。它们有多种类型(ID、文本匹配、地理位置、全文匹配、记录集等)。它是您使用SQL所能获得的最动态的。
我知道如何在不使用动态SQL的情况下做到这一点:
/*for simple match*/ WHERE @Input IS NOT NULL OR t.col = @Input
这有缺点,因为连接等。我从来没有使用过动态SQL。但根据我所读到的,这似乎是动
是否有一种方法可以在不使用动态SQL的情况下将参数中的值命名为列?
我需要将@input参数中的值作为SQL语句中列的名称输出。我需要避免使用动态SQL。
DECLARE @input VARCHAR(10)=' Person ';
SELECT count(*) AS @input + ' Open Data'
FROM #Accounts a
JOIN dbo.FileFeed t On t.ID = a.AccountID
GROUP BY a.accountid
我需要检查SQL语句中的某一列是否不为空。
我的SQL查询:
select column_a, column_b, column_c, column_d, column_x
from myTable
我的select中有很多列。因此,如果我要执行以下操作,则会遇到性能问题:
select column_a, column_b, column_c, column_d, column_x
from myTable
where column_a is not null or column_b is not null or column_c is not null
or column_x is n
在SQL insert中,通常我们在SQL中指定列的名称。有没有一种动态生成的方法?基本上,如果我们指定列的名称,那么明天如果添加一个新的列,就会涉及到代码更改。我怎样才能避免这种情况?
我在考虑下面的解决方案-
如何通过select column_name,* from information_schema.columns where table_name = '‘order by ordinal_position;获取列名,然后创建包含列的INSERT语句?这样我们就不需要在SQL中指定列名...有什么想法吗?
我有一个带有两个表的Server数据库:
带有列的tblEmp:
EmpNum, EmpName, EmpAge, EmpAdress, EmpDegree, EmpJobTitle, EmpPhone
以及用于设置两个表之间关系的列UnitID。
带有列的tblUnits:
UnitID, UnitName
在VB中,代码是:
Public Class Form1
Dim con As New SqlConnection("server=.....etc")
Dim adapter As SqlDataAdapter
Dim dt As New Da
我有一个带有Datagridview和绑定文本框的VB.Net Winform来编辑行。这些列是通过Access使用SQL SELECT命令使用两个表中的字段填充的。一切正常,但我不知道如何将编辑好的行保存到底层表中。我收到一个错误,说“多个基表不支持动态SQL”。这是我当前的代码。我必须为每个表创建一个更新命令吗?
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles
btnSave.Click
JobSitesManager.EndCurrentEdit()
Try
我在用Firebird编写存储过程方面是很新的,我写了我在互联网上看到的任何东西,但是我得到了令牌未知的错误。这是我非常简单的代码
CREATE or ALTER PROCEDURE TRIAL
(
IN_ID DCOUNTER
)
AS
begin
SELECT * FROM table1
end
错误是:
动态SQL错误
SQL错误代码= -104
令牌未知-第13行,第1列
结束
我怎么才能解决这个问题?我试着添加和删除一些分号,结尾,开始。
是否有一种方法可以编写如下查询:
select * from <some number of tables>
...where表的数目未知?我想避免使用动态SQL。我想从所有具有特定前缀的表(表)中选择所有行:
select * from t1
select * from t2
select * from t3
...
我不知道会有多少t(n) (可能是1,可能是20,等等)。t表列结构不一样。有些列有2列,有些列有3或4列。
使用动态SQL并不难,但我想知道是否有一种使用类似sys.tables的方法。
更新
基本数据库设计说明
N家公司将注册/登录我的申请。
每家公司将设置一个
我的公司需要允许我们的应用程序的内部用户通过我们的UI直接针对数据库编写查询。但是当我们显示结果时,我们的代码需要知道每个返回列用于哪个列和表,以便可以用一些颜色编码和每列的其他逻辑来显示结果。
所以我希望有一个类或一些简单的代码来执行SQL解析,并以某种方式给出SQL查询中每个返回列所表示的源表和列名。
一个例子
select b.FirstName As Name, c.Address From BusinessOwner b
left join ContactLocation c on b.ID = c.OwnerID
因此,我需要一些代码来确定"Name“输出列实际上来
我有一个使用动态SQL的MySQL存储过程。我们使用了动态SQL,因为我们有几个具有类似列的表,并且我们试图使代码尽可能可重用。
我担心SQL注入,但是标准的攻击字符串似乎不起作用。此存储过程易受SQL注入的影响吗?如果是的话,是否有更好的方法来编写它?
CREATE DEFINER=CURRENT_USER PROCEDURE `sp_lookup`(IN tableName VARCHAR(256))
BEGIN
SET @sql = CONCAT('SELECT id, name, FROM ', tableName, ' ORDER BY name'
我研究了动态SQL和inc()函数,但这两者都不是我真正想要的。
假设我有一个这样的数据库:
grade name age
9 Bob 9
10 Sue 11
11 Larry 15
9 Joe 8
10 Carrot 10
我想创建一个表,首先选择具有最低等级(9)的所有行,然后显示最旧的行。然后,它遍历并搜索下一个最高等级(10),并显示最旧的等级。然后转到下一个最高等级(11),并显示最旧的等级。
我希望它们都在同一个表中,而不必为每个年级编写单独