标签: dynamic-sql

为什么有人在SQL子句中使用WHERE 1 = 1 AND <conditions>?

为什么有人会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 dynamic-sql

246
推荐指数
13
解决办法
19万
查看次数

如何将sp_executesql结果转换为变量?

我有一个我需要执行的动态SQL,然后我需要将结果存储到变量中.

我知道我可以使用,sp_executesql但无法找到关于如何做到这一点的明确例子.

t-sql dynamic-sql

165
推荐指数
4
解决办法
27万
查看次数

删除名称以某个字符串开头的所有表

我想要一个脚本来删除名称以给定字符串开头的所有表.我确信这可以用一些动态的sql和INFORMATION_SCHEMA表来完成.

如果有人有脚本,或者可以快速敲门,请发布.

如果在我弄清楚之前没有人发布答案,我会发布我的解决方案.

sql sql-server dynamic-sql

147
推荐指数
8
解决办法
19万
查看次数

截断Postgres数据库中的所有表

我经常需要在重建之前删除PostgreSQL数据库中的所有数据.我将如何直接在SQL中执行此操作?

目前我已经设法提出一个SQL语句,它返回我需要执行的所有命令:

SELECT 'TRUNCATE TABLE ' ||  tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
Run Code Online (Sandbox Code Playgroud)

但是,一旦拥有它们,我就无法以编程方式执行它们.

postgresql truncate dynamic-sql plpgsql database-table

142
推荐指数
8
解决办法
13万
查看次数

一个表的SQL更新字段来自另一个表的字段

我有两张桌子:

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存在于AB.

是否有UPDATE语法或任何其他方法来指定列名称,只是说"设置A的所有列"

我正在使用PostgreSQL,因此也接受了一个特定的非标准命令(但不是首选).

sql postgresql dynamic-sql sql-update

115
推荐指数
6
解决办法
14万
查看次数

将动态SQL的结果转换为sql-server的变量

在存储过程中按如下方式执行动态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 t-sql sql-server sql-server-2005 dynamic-sql

111
推荐指数
2
解决办法
16万
查看次数

如果不存在,请创建PostgreSQL ROLE(用户)

如何编写一个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等.

sql postgresql roles dynamic-sql

96
推荐指数
11
解决办法
8万
查看次数

为什么我得到"过程期望'ntext/nchar/nvarchar'类型的参数'@statement'." 当我尝试使用sp_executesql?

为什么我会收到此错误

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用sp_executesql?

sql t-sql sql-server dynamic-sql

90
推荐指数
2
解决办法
11万
查看次数

为查询字符串声明变量

我想知道在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)

这可能吗?

sql t-sql sql-server sql-server-2005 dynamic-sql

86
推荐指数
3
解决办法
58万
查看次数

在SQL Server中,如何为给定的表生成CREATE TABLE语句?

我花了很多时间来解决这个问题的解决方案,所以本帖子的精神,我在这里发布,因为我觉得它可能对其他人有用.

如果有人有更好的脚本或任何要添加的内容,请发布.

编辑:是的,我知道如何在Management Studio中执行此操作 - 但我需要能够在另一个应用程序中执行此操作.

sql-server scripting dynamic-sql

73
推荐指数
8
解决办法
10万
查看次数