我有以下动态查询,没有条件,这是正常的工作WHERE,这是期待的UNIQUEIDENTIFIER.
当我把它传入时,我没有得到结果.我试过CAST和CONVERT,但没有结果.我可能做错了,任何人都可以帮忙吗?
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函数,它执行一个简单的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 by和limit条款,我有哪些选择?
我想这样的查询:
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) 它必须简单,但我正在迈出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)
有可能吗?
我想使用一个sql命令/查询从同一个数据库中删除所有共享相同前缀('supenh_agk')的表.
像这样的东西.
http://code.google.com/p/squiggle-sql/wiki/Tutorial.
对于需要从UI的用户输入构建复杂sql的情况,这是必需的.目前在我正在使用的项目中正在使用String Manipulation,它看起来很难看并且难以维护.
我有一些复杂的查询要使用许多可选的过滤器构建,MyBatis似乎是生成动态SQL的理想候选者.
但是,我仍然希望我的查询在与应用程序的其余部分(不使用MyBatis)相同的框架中执行.
所以我希望做的是严格使用MyBatis来生成SQL,但是从那里使用我的应用程序的其余部分来实际执行它.这可能吗?如果是这样,怎么样?
我有一个庞大的架构,有数百个表和数千列.我知道一个特定的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中使用绑定变量执行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语句中使用绑定变量?
我一直有这个问题:我有一个表上需要删除的20个索引才能进行测试.删除表不会丢弃所有这些元数据.
似乎没有通配符drop index ix_table_*或任何有用的命令.你可以编写的psql周围似乎有一些bash循环.
必须有更好的东西!思考?
如何基于枚举常量参数在myBatis 3.1.1中执行动态SQL?