标签: dynamic-sql

SQL错误:关键字"结束"附近的语法不正确

需要有关此SQL Server 2000过程的帮助.问题变得困难,因为我正在通过Oracle SQL Developer测试程序.

我正在运行使用Varchar格式的新数字序列迭代列的过程,以便为那些具有空值的人.

但我一直收到错误,所以a)我可能做错了方法b)由于使用的版本语法不正确.我主要是Oracle用户.

我一直得到的错误:SQL Error: Incorrect syntax near the keyword 'End'.这没有足够的帮助解决它.本End是指在程序的最后"终结".

任何帮助将不胜感激.

这是程序.

ALTER PROCEDURE [dbo].[OF_AUTOSEQUENCE] @JvarTable Varchar(250), @varColumn Varchar(250), @optIsString char(1), @optInterval int AS
/*
Procedure   OF_AUTOSEQUENCE
Created by  Joshua [Surname omitted]
When        20100902

Purpose     To fill up column with new sequence numbers
Arguments   varTable    - Table name
            varColumn   - Column name
            optIsString - Option: is it string or numeric, either use T(rue) or F(alse)
            optInterval - Steps in increment in …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-server-2000 dynamic-sql syntax-error

8
推荐指数
1
解决办法
4万
查看次数

如何在不使用动态SQL的情况下在存储过程中使用Order By

我有以下MS SQL存储过程.我需要在不使用动态SQL和sp_executesql方法的情况下对结果进行排序

@Order由可具有的可能值ProductName ASC,ProductName DESC,ProductCode ASC,VendorName DESC,VendorCodeClientName

我试图使用ORDER BY CASE,是否有任何问题,如果 ProductName,ProductCode是不同的类型?

ALTER PROCEDURE [dbo].[SortedReport]
(
    @ClientID INT,
    @RecordLimit,
    @FromDate DATETIME,
    @ToDate DATETIME,
    @OrderBy NVARCHAR(MAX)
)

AS
BEGIN

IF (@OrderBy IS NULL) BEGIN
    SET @OrderBy = 'ProductName';
END    

SELECT TOP (@RecordLimit) 
        sv.ClientID,
        sv.VendorID,
        sv.ProductID,
        sv.TransactionTime,
        sv.ClientName,
        sv.VendorName,
        sv.ProductName,
        sv.ProductCode,
        sv.VendorCode,
FROM SortedReportiew AS sv 
WHERE (sv.ClientID = @ClientID)
    AND (sv.TransactionTime >= @FromDate)
    AND …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server dynamic-sql sql-order-by

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

Java中动态SQL库的比较

考虑一个只需要对后备数据库进行实时搜索的只读服务.该服务需要能够生成相当复杂的选择查询,以基于多表对象生成摘要,报告和结果.库/框架选择的优先级是(sql)的性能,可维护性和寿命.

Hibernate - 似乎需要"技巧"才能生成正确的SQL,Criteria API看起来很有前途,但在涉及任意查询时也有一些限制.

MyBatis - 没有类似Criteria的API,但它清晰干净,通常不需要Hibernate的技巧和推文.有限的数据库抽象.

其他一些尚待评估的解决方案包括:SQLBuilder,Squiggle,Querydsl,JOOQ或自定义解决方案.

SO用户发现的最有效的方法是提供快速的多功能搜索服务.

[更新] -我在Hibernate面临的一些技巧和问题是......

通常,两次加入同一个表似乎会导致问题.我甚至设法欺骗hibernate生成正确的SQL只是为了让它映射结果错误,因为它缓存了实体的第一个实例并假设第二个连接中的列是多余的.通过注释表达的条件连接也很痛苦.不是说它不可能,但非常神秘而且不直观.

为了回答下面的X-Zero,我想从规范到结果.即,消费者告诉我他们所知道的,并且我构建了一个即时回答他们问题的查询.在实践中,我打算对他们可以传递的内容有一些限制.

java hibernate dynamic-sql mybatis

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

提取从动态SQL返回的值

我有一个存储过程,它生成并执行一段动态T-SQL,一旦建立起来就像这样

SELECT 
    tblUsers.strUserName AS [Username]
    ,tblUsers.strEmail AS [Email]
    ,tblUserAuditLog.strIpAddress AS [IP Address]
    ,tblUserAuditLog.dtAuditTimeStamp AS [Timestamp]
    ,tblUserAuditLog.strAuditLogAction AS [Action]
    ,tblUserAuditLog.strLogDetails AS [Details]
FROM         
    tblUserAuditLog 
        LEFT OUTER JOIN tblUsers 
        ON tblUserAuditLog.intUserIdFK = tblUsers.intUserId
WHERE 
    tblUsers.strUserName = 'a12jun'
    AND tblUserAuditLog.dtAuditTimeStamp >= '2012-08-10'
Run Code Online (Sandbox Code Playgroud)

此查询可以在开发环境中返回几千行,并将在实时返回更多.

我想知道在实际返回结果之前动态查询返回了多少行,这样如果数量超过某个限制,我可以返回"缩小查询"错误消息.

我试过像这样生成另一块SQL:

DECLARE @sqlrowcount NVARCHAR(MAX);
SET @sqlrowcount = 'SELECT COUNT(*) FROM (' + @sql + ') AS TEMP';
EXEC(@sqlrowcount);

IF @@ROWCOUNT > @limit BEGIN .... END
Run Code Online (Sandbox Code Playgroud)

@sql动态查询在哪里.然后我尴尬地意识到EXEC(@sqlrowcount)将永远返回1,因为它返回一个记录,其是记录的数量.

有没有(相对)优雅的方式,例如没有将结果写入临时表?

t-sql sql-server dynamic-sql

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

PostgreSQL - SQL 状态:42601 语法错误

我想知道如何在函数内使用动态查询。我尝试了很多方法,但是,当我尝试编译我的函数时,会显示一条消息 SQL 42601。

我使用的代码:

CREATE OR REPLACE FUNCTION prc_tst_bulk(sql text)
RETURNS TABLE (name text, rowcount integer) AS 
$$
BEGIN
  WITH v_tb_person AS (return query execute sql)
  select name, count(*) from v_tb_person where nome like '%a%' group by name
  union
  select name, count(*) from v_tb_person where gender = 1 group by name;
END     
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息:

ERROR:  syntax error at or near "return"
LINE 5:     WITH v_tb_person AS (return query execute sql)
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

WITH v_tb_person AS (execute sql)

WITH v_tb_person …
Run Code Online (Sandbox Code Playgroud)

database postgresql bulkinsert dynamic-sql plpgsql

7
推荐指数
1
解决办法
14万
查看次数

更换'转义字符后,T-SQL的安全性如何?

我完全清楚,对SQL查询进行清理的正确做法是对它们进行参数化.

我研究了许多预先存在的代码,其中的消毒措施是'''动态字符串替换所有的实例.我想知道我应该如何关注.

事情就是这样:这段代码专门在T-SQL(SQL Server 2008R2及更高版本)上运行,据我所知,它'是T-SQL 的唯一转义字符.

那么,你将如何执行注射攻击以超越上述措施?即就像T-SQL一样,非常"天真"的消毒实际上非常可靠.

t-sql sql-server security sql-injection dynamic-sql

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

执行动态交叉表查询

我在Postgres数据库中实现了这个功能:http://www.cureffi.org/2013/03/19/automatically-creating-pivot-table-column-names-in-postgresql/

这是功能:

create or replace function xtab (tablename varchar, rowc varchar, colc varchar, cellc varchar, celldatatype varchar) returns varchar language plpgsql as $$
declare
    dynsql1 varchar;
    dynsql2 varchar;
    columnlist varchar;
begin
    -- 1. retrieve list of column names.
    dynsql1 = 'select string_agg(distinct '||colc||'||'' '||celldatatype||''','','' order by '||colc||'||'' '||celldatatype||''') from '||tablename||';';
    execute dynsql1 into columnlist;
    -- 2. set up the crosstab query
    dynsql2 = 'select * from crosstab (
 ''select '||rowc||','||colc||','||cellc||' from '||tablename||' group by 1,2 order by …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql crosstab plpgsql

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

在PostgreSQL中动态生成列

我已经看到有一些类似的问题已经退出,但是我还不了解如何自己编写代码。请记住,我只是该领域的初学者。

基本上我想像这样旋转表:

zoom |    day     | point         zoom | 2015-10-01 |  2015-10-02 | ......
------+-----------+-------  ---> ------+------------+-------------+
   1 | 2015-10-01 |   201            1 |    201     |     685     |
   2 | 2015-10-01 |    43            2 |     43     |     346     | 
   3 | 2015-10-01 |    80            3 |     80     |     534     | 
   4 | 2015-10-01 |   324            4 |    324     |     786     | 
   5 | 2015-10-01 |    25            5 |     25     |     685     |
   1 | 2015-10-02 |   685 
   2 | 2015-10-02 …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql crosstab plpgsql postgresql-9.3

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

需要通过变量SQL分配一个列名

我在这里尝试做的是创建一个动态查询,其中 DBA 只需要在变量级别更改列名,原因是因为我们有多个被可怕地创建的数据库,即使它们具有相同的数据,列名从一个变为另一个(它们之间没有规范化)。

我正在处理一个大约有 400 行的查询,我试图避免的是将逻辑传递给另一个 DBA,在那里他们必须通过脚本并替换所有列名......而只是分配列名从他们的数据库到逻辑匹配。不确定这是否可能。

这是一个例子:

Declare @ColumnA 
Declare @ColumnB
set @ColumnA = 'UserID'
set @ColumnB = 'Salary'

select @ColumnA,@ColumnB from Table
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这种功能?

sql t-sql sql-server dynamic-sql

7
推荐指数
1
解决办法
2万
查看次数

SSIS - 动态循环多个数据库

我必须在一个独特的数据库中整合来自1000多个具有相同结构/表的数据库中的数据.可以每天添加和删除DB,因此我需要动态检索DB列表并运行动态生成的SQL查询以提取每个数据库的数据.

我设计了数据流,其中包含一个变量查询,如果使用静态值执行,该变量工作正常:

在此输入图像描述

使用SQL任务,我获取实例列表,我循环遍历它们并使用嵌套的Foreach循环/ SQL任务检索数据库名称并使用以下语句创建动态SQL(DB名称是匿名的):

选择'select'''+ name +'''作为DatabaseName,ID来自'+ name +'.[dbo].[Orders] as querytext FROM sys.databases WHERE name LIKE('XXX%_%');

这部分工作正常:

在此输入图像描述

如何使用SQL任务"执行SQL任务 - 获取查询文本"的结果作为查询在源"OLE DB源1"("数据流任务3"的一部分)中执行?

我尝试在SQL任务的结果集中映射一个Object变量"User :: SqlCommandFromSQLTask",然后将其设置为ADO对象源变量,并使用Script任务将其转换为字符串并将值传递给变量SqlStringFromSQLTask3(用作"OLE DB Source 1"中的源代码,但是我收到错误违反PRIMARY KEY约束,就好像数据流始终以我设置为默认值的静态值运行:

在此输入图像描述

在此输入图像描述

在此输入图像描述

虽然,如果我从变量面板中删除值,我会收到错误"没有为命令对象设置命令文本.",甚至将数据流的属性DelayValidation更改为false.

任何帮助深表感谢.

sql-server ssis etl dynamic-sql

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