标签: dynamic-sql

T-SQL:如何在动态SQL中使用参数?

我有以下动态查询,没有条件,这是正常的工作WHERE,这是期待的UNIQUEIDENTIFIER.

当我把它传入时,我没有得到结果.我试过CASTCONVERT,但没有结果.我可能做错了,任何人都可以帮忙吗?

CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */
(
@p_CreatedBy UNIQUEIDENTIFIER
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql ='

DECLARE @p_CreatedBY UNIQUEIDENTIFIER

SELECT 
  DateTime,
  Subject,
  CreatedBy
FROM
(
  SELECT 
    DateTime, Subject, CreatedBy, 
    ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing
  FROM
    ComposeMail
  WHERE 
    CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */
) AS NewDataTable
'

EXEC sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql

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

PostgreSQL参数化表函数中的Order By/Limit

我有一个sql函数,它执行一个简单的sql select语句:

CREATE OR REPLACE FUNCTION getStuff(param character varying)
  RETURNS SETOF stuff AS
$BODY$
    select *
    from stuff
    where col = $1
$BODY$
  LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

现在我调用这个函数是这样的:

select * from getStuff('hello');
Run Code Online (Sandbox Code Playgroud)

如果我需要订购并限制结果order bylimit条款,我有哪些选择?

我想这样的查询:

select * from getStuff('hello') order by col2 limit 100;
Run Code Online (Sandbox Code Playgroud)

效率不高,因为表中的所有行都stuff将由函数返回,getStuff然后按限制排序和切片.

但即使我是对的,如何通过sql语言函数的参数传递顺序也没有简单的方法.只能传递值,而不能传递sql语句的一部分.

另一种选择是用plpgsql语言创建函数,在那里可以构造查询并通过它来执行EXECUTE.但这也不是一个非常好的方法.

那么,有没有其他方法可以实现这一目标?或者你会选择什么选择?在函数外部订购/限制,还是plpgsql?

我正在使用postgresql 9.1.

编辑

我修改了CREATE FUNCTION语句,如下所示:

CREATE OR REPLACE FUNCTION getStuff(param character varying, orderby character varying)
  RETURNS SETOF stuff AS
$BODY$
    select t.* …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql dynamic-sql plpgsql

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

在plpgsql函数中将表和列名定义为参数?

它必须简单,但我正在迈出Postgres函数的第一步,我找不到任何有效的东西......

我想创建一个修改表和/或列的函数,我找不到在我的函数中指定我的表和列作为参数的正确方法.

就像是:

CREATE OR REPLACE FUNCTION foo(t table)
RETURNS void AS $$
BEGIN
   alter table t add column c1 varchar(20);
   alter table t add column c2 varchar(20);
   alter table t add column c3 varchar(20);
   alter table t add column c4 varchar(20);
END;
$$ LANGUAGE PLPGSQL;

select foo(some_table)
Run Code Online (Sandbox Code Playgroud)

在另一种情况下,我想要一个改变某个表中某个列的函数:

CREATE OR REPLACE FUNCTION foo(t table, c column)
RETURNS void AS $$
BEGIN
   UPDATE t SET c = "This is a test";
END;
$$ LANGUAGE PLPGSQL;
Run Code Online (Sandbox Code Playgroud)

有可能吗?

postgresql variables function dynamic-sql plpgsql

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

删除postgres中共享相同前缀的所有表

我想使用一个sql命令/查询从同一个数据库中删除所有共享相同前缀('supenh_agk')的表.

sql postgresql dynamic-sql plpgsql

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

是否有.Net的动态Sql构建器库?

像这样的东西.

http://code.google.com/p/squiggle-sql/wiki/Tutorial.

对于需要从UI的用户输入构建复杂sql的情况,这是必需的.目前在我正在使用的项目中正在使用String Manipulation,它看起来很难看并且难以维护.

.net sql ado.net dynamic-sql

15
推荐指数
2
解决办法
3万
查看次数

我可以使用MyBatis生成动态SQL而不执行它吗?

我有一些复杂的查询要使用许多可选的过滤器构建,MyBatis似乎是生成动态SQL的理想候选者.

但是,我仍然希望我的查询在与应用程序的其余部分(不使用MyBatis)相同的框架中执行.

所以我希望做的是严格使用MyBatis来生成SQL,但是从那里使用我的应用程序的其余部分来实际执行它.这可能吗?如果是这样,怎么样?

java dynamic-sql mybatis

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

如何使用T-SQL在DB中搜索某些子字符串的所有文本字段

我有一个庞大的架构,有数百个表和数千列.我知道一个特定的IP地址存储在这个数据库中的几个地方,但是我不确定它存储在哪个表或列中.基本上,我试图在任何地方找到这个IP地址存储在DB中,因此我可以将其更新为所有这些位置的新值.

这是我在T-SQL语句中的第一个破解,用于打印出数据库中包含子字符串10.15.13的每个文本列的表和列名称以及值.

现在,这是有效的.问题是,当我在Management Studio中执行它时,对sp_executesql的调用实际上将返回每个不返回任何内容的查询的所有空结果(即列没有任何带有该子字符串的记录),并且它填充结果窗口到它的最大值,然后我实际上看不出是否有任何印刷品.

有没有更好的方法来编写此查询?或者我可以以不同的方式运行它,以便它只显示这个子字符串存在的表和列?

DECLARE
    @SchemaName VARCHAR(50),
    @TableName VARCHAR(50),
    @ColumnName VARCHAR(50);
BEGIN
    DECLARE textColumns CURSOR FOR
    SELECT s.Name, tab.Name, c.Name
    FROM Sys.Columns c, Sys.Types t, Sys.Tables tab, Sys.Schemas s
    WHERE s.schema_id = tab.schema_id AND tab.object_id = c.object_id AND c.user_type_id = t.user_type_id
    AND t.Name in ('TEXT','NTEXT','VARCHAR','CHAR','NVARCHAR','NCHAR');

    OPEN textColumns

    FETCH NEXT FROM textColumns
    INTO @SchemaName, @TableName, @ColumnName

    WHILE @@FETCH_STATUS = 0
    BEGIN
        DECLARE @sql NVARCHAR(MAX),
                @ParamDef NVARCHAR(MAX),
                @result NVARCHAR(MAX);              
        SET @sql = N'SELECT ' + @ColumnName + ' FROM ' + …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql

14
推荐指数
2
解决办法
3万
查看次数

为什么我不能在动态SQL中的DDL/SCL语句中使用绑定变量?

我试图在动态SQL中使用绑定变量执行SQL命令:

-- this procedure is a part of PL/SQL package Test_Pkg
PROCEDURE Set_Nls_Calendar(calendar_ IN VARCHAR2)
IS
BEGIN
   EXECUTE IMMEDIATE
      'ALTER SESSION
      SET NLS_CALENDAR = :cal'
      USING IN calendar_;
END Set_Nls_Calendar;
Run Code Online (Sandbox Code Playgroud)

然后在客户端,我试图调用该过程:

Test_Pkg.Set_Nls_Calendar('Thai Buddha');
Run Code Online (Sandbox Code Playgroud)

但这就是我ORA-02248: invalid option for ALTER SESSION.

我的问题是:为什么我不能在动态SQL中的DDL/SCL语句中使用绑定变量?

oracle plsql dynamic-sql execute-immediate

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

如何删除Postgres中表的所有索引?

我一直有这个问题:我有一个表上需要删除的20个索引才能进行测试.删除表不会丢弃所有这些元数据.

似乎没有通配符drop index ix_table_*或任何有用的命令.你可以编写的psql周围似乎有一些bash循环.
必须有更好的东西!思考?

postgresql indexing ddl metadata dynamic-sql

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

在myBatis动态SQL中使用枚举参数

如何基于枚举常量参数在myBatis 3.1.1中执行动态SQL?

string enums ibatis dynamic-sql mybatis

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