为什么有人会WHERE 1=1 AND <conditions>在SQL子句中使用(通过串联字符串获得的SQL,视图定义)
我已经在某处看到这将用于防止SQL注入,但它似乎非常奇怪.
如果有注射WHERE 1 = 1 AND injected OR 1=1会产生相同的结果injected OR 1=1.
稍后编辑:视图定义中的用法如何?
谢谢您的回答.
但是,我不明白为什么有人会使用这种结构来定义视图,或者在存储过程中使用它.
以此为例:
CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value
Run Code Online (Sandbox Code Playgroud) 我有一个我需要执行的动态SQL,然后我需要将结果存储到变量中.
我知道我可以使用,sp_executesql但无法找到关于如何做到这一点的明确例子.
我想要一个脚本来删除名称以给定字符串开头的所有表.我确信这可以用一些动态的sql和INFORMATION_SCHEMA表来完成.
如果有人有脚本,或者可以快速敲门,请发布.
如果在我弄清楚之前没有人发布答案,我会发布我的解决方案.
我经常需要在重建之前删除PostgreSQL数据库中的所有数据.我将如何直接在SQL中执行此操作?
目前我已经设法提出一个SQL语句,它返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
Run Code Online (Sandbox Code Playgroud)
但是,一旦拥有它们,我就无法以编程方式执行它们.
我有两张桌子:
A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]
Run Code Online (Sandbox Code Playgroud)
A将永远是其子集B(意味着所有列A也在其中B).
我想更新具有特定ID输入的记录,其中B包含来自A所有列的数据A.这ID存在于A和B.
是否有UPDATE语法或任何其他方法来指定列名称,只是说"设置A的所有列"?
我正在使用PostgreSQL,因此也接受了一个特定的非标准命令(但不是首选).
在存储过程中按如下方式执行动态SQL:
DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
SET @city = 'London'
SET @sqlCommand = 'SELECT COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city
Run Code Online (Sandbox Code Playgroud)
如何将count(*)列值用作SP中的返回值?
如何编写一个SQL脚本来在PostgreSQL 9.1中创建一个ROLE,但如果它已经存在则不会引发错误?
当前脚本只有:
CREATE ROLE my_user LOGIN PASSWORD 'my_password';
Run Code Online (Sandbox Code Playgroud)
如果用户已存在,则会失败.我喜欢这样的东西:
IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user')
BEGIN
CREATE ROLE my_user LOGIN PASSWORD 'my_password';
END;
Run Code Online (Sandbox Code Playgroud)
...但是这不起作用 - IF在纯SQL中似乎不支持.
我有一个批处理文件,可以创建PostgreSQL 9.1数据库,角色和其他一些东西.它调用psql.exe,传入要运行的SQL脚本的名称.到目前为止,所有这些脚本都是纯SQL,我想尽可能避免使用PL/pgSQL等.
为什么我会收到此错误
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用sp_executesql?
我想知道在MS SQL Server 2005中是否有办法做到这一点:
DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''
SELECT AdministratorCode,
SUM(Total) as theTotal,
SUM(WOD.Quantity) as theQty,
AVG(Total) as avgTotal,
(SELECT SUM(tblWOD.Amount)
FROM tblWOD
JOIN tblWO on tblWOD.OrderID = tblWO.ID
WHERE tblWO.Approved = '1'
AND tblWO.AdministratorCode = tblWO.AdministratorCode
AND tblWO.OrderDate BETWEEN @theDate
)
... etc
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我花了很多时间来解决这个问题的解决方案,所以本帖子的精神,我在这里发布,因为我觉得它可能对其他人有用.
如果有人有更好的脚本或任何要添加的内容,请发布.
编辑:是的,我知道如何在Management Studio中执行此操作 - 但我需要能够在另一个应用程序中执行此操作.
dynamic-sql ×10
sql ×7
sql-server ×5
t-sql ×4
postgresql ×3
plpgsql ×1
roles ×1
scripting ×1
sql-update ×1
truncate ×1