标签: dynamic-sql

APOSTROPHE DYNAMIC SQL

DECLARE @SQL Varchar(Max)
DECLARE @DESCR Varchar(Max)

-- Customer enters description into @Descr
SET @SQL = 'Update TableName SET FieldName='''
+ @DESCR
+ ''' WHERE ID=123'
Run Code Online (Sandbox Code Playgroud)

问题是当客户将撇号输入@Descr变量时.

问:在Microsoft SQL Server 2005中,如何用双撇号替换所有的萎缩?

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

1
推荐指数
1
解决办法
4223
查看次数

安全上下文中的动态TSQL

我有一个数据库,其中登录数据库的主用户没有直接对任何表的权限.用户需要执行已明确授予它的存储过程.这涵盖了所需的任何简单的CRUD操作.但是现在,我需要动态执行SQL,但我希望在用户上保持相同的安全级别.一个例子是

UPDATE [Table] SET [Column 1] = @Column1 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下[第1列]及其值将在运行时设置.

我知道在存储过程中执行动态代码的唯一方法是使用sp_runsql,但是出于安全原因,创建使用sp_runsql执行动态查询的存储过程会失败(并且通常不是很聪明)

任何人都可以想到一种实现这种功能和安全性的方法吗?

t-sql sql-server dynamic-sql

1
推荐指数
1
解决办法
630
查看次数

Oracle SQL - 从多行中获取值

我有这样一张桌子:

TABLE: FACTS
ID       KEY         VALUE
1        name        Jeremy
1        height      5'11
1        awesomeness 10
2        name        Mark
2        awesomeness 4
3        height      4'6
Run Code Online (Sandbox Code Playgroud)

因此,(ID,KEY)元组可以被视为主键.

我试图返回这样的行:

ID     NAME     HEIGHT    AWESOMENESS
1      Jeremy   5'11      10
2      Mark     (null)    4
3      (null)   4'6       (null)
Run Code Online (Sandbox Code Playgroud)

除了通过对每列进行子选择之外,如何获取键值,如果它们在那里,并将它们收集到我的单行中?我到目前为止尝试的是:

SELECT 
  id,
  CASE WHEN facts.key = 'name' THEN value END name,
  CASE WHEN facts.key = 'height' THEN value END height,
  CASE when facts.key = 'awesomeness' THEN value END awesomeness
FROM
  facts
WHERE
  facts.id in (1,2,3)
Run Code Online (Sandbox Code Playgroud)

但是由于显而易见的原因,每个匹配的键返回一行,而不是每个id一行.

我怎样才能按照我想要的方式去做? …

sql oracle pivot dynamic-sql

1
推荐指数
1
解决办法
1211
查看次数

奇怪的动态SQL错误

全部,我有以下动态SQL查询

DECLARE @TableName NVARCHAR(255);
SET @TableName = 'BadCodesErrSumm';
DECLARE @DropSql NVARCHAR(MAX);
SET @DropSql = 
    'IF EXISTS (SELECT *  
                FROM Report.sys.objects 
                WHERE name = ''' + @TableName + ''' AND type = ''U'') 
     DROP TABLE [IPAReport]..[' + @TableName + '];'
PRINT @DropSql;
EXEC @DropSql;
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误

Msg 203, Level 16, State 2, Line 11
The name 'IF EXISTS (SELECT *  
                FROM Report.sys.objects 
                WHERE name = 'BadCodesErrSumm' AND type = 'U') 
          DROP TABLE [Report]..[BadCodesErrSumm];' is not a valid identifier.
Run Code Online (Sandbox Code Playgroud)

但是,打印输出

IF EXISTS (SELECT …
Run Code Online (Sandbox Code Playgroud)

sql dynamic-sql sql-server-2008

1
推荐指数
1
解决办法
167
查看次数

使用存储过程创建视图时出错

我有以下存储过程创建一个视图:

ALTER PROC Proc_Guards_By_Client
(
    @client_number INT,
    @client_name   NVARCHAR(16)
)
AS
 BEGIN
   IF EXISTS(select * FROM sys.views where name = 'vwGuardsByClients')
   BEGIN
    EXEC ('CREATE VIEW vwGuardsByClients
    AS
    SELECT TOP 1000 
      cgt.[guard_id],
      sg.first_name,
      sg.last_name,
      sg.ammunition_quantity    
      FROM [sws4].[dbo].[client_guard_tracking] cgt
      INNER JOIN CLIENTS c
      ON c.client_number = cgt.client_number
      INNER JOIN security_guard sg
      ON sg.guard_id = cgt.guard_id
      WHERE cgt.client_number = @client_number
      OR c.client_name = @client_name
    ')
    END
    ELSE
    BEGIN
      EXEC ('UPDATE VIEW vwGuardsByClients
      SELECT TOP 1000 
      cgt.[guard_id],
      sg.first_name,
      sg.last_name,
      sg.ammunition_quantity    
      FROM [sws4].[dbo].[client_guard_tracking] cgt
      INNER …
Run Code Online (Sandbox Code Playgroud)

t-sql stored-procedures dynamic-sql sql-server-2008 sql-view

1
推荐指数
1
解决办法
1695
查看次数

如何使用动态SQL获取值

我有一个查询如下,根据要求执行.

DECLARE @count varchar(20)
SET @count = (SELECT COUNT(*) FROM emp)
PRINT 'Employee Count: '+@count
SELECT @count
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要使用动态SQL,我没有得到我想要的结果.我的动态SQL代码如下:

DECLARE @count varchar(10)
DECLARE @sqlQuery varchar(500)
SET @sqlQuery = 'SET '+@count +'= (SELECT COUNT(*) FROM emp)'
EXEC (@sqlQuery)
PRINT 'Employee Count: '+@count
SELECT @count
Run Code Online (Sandbox Code Playgroud)

这段代码给了我一个NULL作为输出.

应该做什么?可以帮我说一下我哪里出错了?

sql t-sql sql-server dynamic-sql

1
推荐指数
1
解决办法
212
查看次数

如何修剪PostgreSQL数据库中所有表中每列的尾随空格


我在这个任务就是我需要努力修剪所有尾随空格从每所有的在我的PostgreSQL Database.

   
我有

update tbl_sale set product=trim(product) where product LIKE '% '
Run Code Online (Sandbox Code Playgroud)

这将TRIMproduct tbl_sale.


在我的数据库 中有137个表,如果它有尾随空格,那么我的数据库中的TRIM所有是否可能?

sql postgresql dynamic-sql

1
推荐指数
1
解决办法
5225
查看次数

检查另一个数据库中是否存在表

我需要检查来自不同数据库的表的存在.我知道如何静态地执行此操作.但我想动态传递表名和数据库名.

所以这是期望,

Declare @tablename varchar(100) = 'testtable', @dbName Varchar(100) = 'TestDB',@isexist varchar(100)
If exists (select 1 from @dbName..sysobjects where name = @tablename)
Set @isexists = 'Table Exists' 
Else set @isexists = 'Table do not exist'
Run Code Online (Sandbox Code Playgroud)

t-sql dynamic-sql sql-server-2012

1
推荐指数
1
解决办法
2671
查看次数

EXECUTE的查询字符串参数为null

编辑

看来我的问题是当这个select语句返回null时(我正在尝试处理的情况 - 当它返回null时,我希望我的新值为-999).如果在找到null时出错,我怎么能这样做呢?

原版的

我已经阅读了有关此错误的所有其他SO帖子,但其中没有一个似乎解决了我的问题的根源.

错误非常简单 - 我的EXECUTE语句中的一个参数为null.大.但是,我在调用之前打印出构成我的EXECUTE语句的每个值,并且我可以清楚地看到没有值为null.

码:

CREATE FUNCTION inform_icrm_prob_flow_query(tablename text, location_id int,
                                            product_date_str text, lead_time_start int,
                                            lead_time_end int, first_member_id int,
                                            last_member_id int, dest_file text)
RETURNS void AS $$
DECLARE
  count int;
  product_date TIMESTAMPTZ;
  interval_lead_time_start text;
  interval_lead_time_end text;
  curr_value double precision;
  query text;
BEGIN
  product_date := product_date_str::TIMESTAMPTZ;
  count := first_member_id;
  curr_value := 0;

  interval_lead_time_start :=  ''''|| product_date ||'''::timestamptz +
                               interval '''||lead_time_start||' hours''';
  interval_lead_time_end :=  ''''|| product_date ||'''::timestamptz +
                             interval '''||lead_time_end||' hours'' -
                             interval ''6 hours''';

  --create our …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql plpgsql psql

1
推荐指数
1
解决办法
7514
查看次数

PL/SQL:ORACLE中的感叹号

以下查询中的感叹号(!)标记是什么?

l_sql := q'!
              SELECT CASE WHEN FILTER_CNT = 0 THEN NULL ELSE FILTER_LIST END AS FILTER_LIST
              FROM
              (
                  SELECT 'TABLE_NAME NOT LIKE ' || LISTAGG(''''||EXCLUSION_CRITERIA||'''', ' AND TABLE_NAME NOT LIKE ') WITHIN GROUP (ORDER BY ROWNUM) AS FILTER_LIST, COUNT(*) AS FILTER_CNT
                  FROM !'|| p_after_owner ||q'!.UT_TABLE_EXCLUSION
                  WHERE EXCLUSION_TYPE = 'P'
              )
            !';
Run Code Online (Sandbox Code Playgroud)

oracle plsql dynamic-sql

1
推荐指数
1
解决办法
265
查看次数