标签: dynamic-sql

我们认为什么是动态sql语句?

a)我们认为什么是动态sql语句?
是否有任何sql语句可以动态地将子句或子句的一部分添加到SQL字符串中?

b)那么使用动态提供的值占位符的参数化字符串是否也被视为动态sql语句?

感谢名单

sql dynamic-sql

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

选择存储过程返回的列

我有一个存储过程,它返回我约50列.我想编写一个查询,在那里我将能够从SP返回的列列表中选择一个特定的列.

我试着写select RSA_ID from exec(uspRisksEditSelect '1')但是它给我一个错误.我想我们需要为它编写一些动态的sql.但我是新手.

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

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

使用SQLAdapter.Update(数据集)引发错误"select命令中没有主键"

总之,C#抛出我的"动态SQL生成的更新命令不支持针对不返回任何键列信息的SelectCommand",而问题的表是否有一个主键(身份,因为它是MSSQL).

我的代码如下:

       void loaddata()
    {
        try
        {
            DS = new DataSet();
            sqladapt = new SqlDataAdapter("SELECT servicetag,name,defect,primkey FROM " + Properties.Settings.Default.DBtableLaptops + "", sqlcon);
            sqladapt.FillSchema(DS, SchemaType.Source);
            sqladapt.Fill(DS);
            commandBuilder = new SqlCommandBuilder(sqladapt);
            DT = DS.Tables[0];
            Laptops_datagridview.DataSource = DT; //I'm using a datagridview to edit the data.
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }
    void savedata()
    {
        //Doesn't work yet.
        try
        {
            sqladapt.Update(DS); // <-- Throws the aforementioned error.
            sqladapt.Dispose();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); …
Run Code Online (Sandbox Code Playgroud)

.net c# sql dynamic-sql primary-key

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

如何从table中选择tablename指定为SqlParameter?

我正在尝试执行动态sql选择我在使用参数从表中选择的位置.

SELECT null FROM @TableName 
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误must declare table variable @TableName.我怀疑这是因为我正在使用变量从表中进行选择.我以前不需要这样做.

List<SqlParameter> sqlParams = new List<SqlParameter>()
{ 
    new SqlParameter("TableName", "testtable"),
    new SqlParameter("FieldName", "testfield"),
    new SqlParameter("Find", "testfind"),
};
string sqlSelect = "SELECT null FROM @TableName 
                    WHERE @FieldName LIKE '%' + @Find + '%' ";

DataTable dtSelect = SqlHelper.ExecuteDataset(sqlConn, CommandType.Text, 
                        sqlSelect, 30, sqlParams.ToArray()).Tables[0]; 
//30 = timeout
Run Code Online (Sandbox Code Playgroud)

如何使用动态sql执行上述操作?(请不要存储程序)

c# dynamic-sql sqlhelper

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

如何使用变量在动态查询中指定IN子句?

在PL/SQL中,您可以使用串联指定IN运算符的值:

v_sql := 'select field1
from table1
where field2 in (' || v_list || ')';
Run Code Online (Sandbox Code Playgroud)

是否可以使用变量执行相同的操作?

v_sql := 'select field1
from table1
where field2 in (:v_list)'; 
Run Code Online (Sandbox Code Playgroud)

如果是这样,怎么样?

编辑:参考Marcin的答案,我如何从结果表中选择?

declare

cursor c_get_csv_as_tables is
select in_list(food_list) food_list
from emp_food
where emp_type = 'PERM';

cursor c_get_food_list (v_food_table varchar2Table)is
select *
from v_food_table;

begin
    for i in c_get_csv_as_tables loop
        for j in c_get_food_list(i.food_list) loop
            dbms_output.put_line(j.element);
        end loop;
    end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ORA-06550: line 10, column 6:
PL/SQL: ORA-00942: table or view does not exist …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql dynamic-sql

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

将$$放在PostgreSQL中以美元引用的字符串中

我在Postgres中有一个功能:

CREATE OR REPLACE FUNCTION upsert(sql_insert text, sql_update text) 
RETURNS integer AS
$BODY$
BEGIN
 EXECUTE sql_insert;
 RETURN 1;
EXCEPTION WHEN unique_violation THEN
 EXECUTE sql_update; 
 RETURN 2;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION upsert(text, text) OWNER TO dce;
Run Code Online (Sandbox Code Playgroud)

我通常使用此查询来调用该函数:

select upsert(
  $$INSERT INTO zz(a, b) VALUES (66, 'hahahaha')$$,
  $$UPDATE zz SET a=66, b='hahahaha' WHERE a=66$$
)
Run Code Online (Sandbox Code Playgroud)

有用.不幸的是,我的查询字符串不能包含$$,如下所示:

select upsert(
  $$INSERT INTO zz(a, b) VALUES (66, 'ha$$hahaha')$$,
  $$UPDATE zz SET a=66, b='hahahaha' WHERE a=66$$
)
Run Code Online (Sandbox Code Playgroud)

我已阅读此 …

postgresql syntax escaping dynamic-sql quoting

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

从动态SQL获取变量的输出

我正在使用动态sqlie

DECLARE @searchstring VARCHAR(500)
DECLARE @str VARCHAR(MAX)
SELECT @str = 'SELECT * FROM Table1 WHERE ' + @searchstring
EXECUTE @str   
Run Code Online (Sandbox Code Playgroud)

我需要的是我想从动态sql上面选择一个列值来传递不同的SP 让我们说我需要ID列值并将其传递给另一个名为GetAnotherData @Ids的sp.我怎样才能做到这一点?

sql dynamic-sql sql-server-2008

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

对于Postgresql 9.1中具有动态表名的循环?

我有一个plpgslq功能,它做一些数据处理,并想写一个for循环,但我的表名在设计时是不知道的.有没有可能的方法来实现这一目标?以下是我想要实现的示例代码片段:

-- Function: check_data()

-- DROP FUNCTION check_data();

CREATE OR REPLACE FUNCTION check_data()
  RETURNS character varying AS
$BODY$declare
 dyn_rec record;
 tbl_name record;
begin
  -- sample dynamic tables
  tbl_name := 'cars';
  tbl_name := 'trucks';
  tbl_name := 'bicycles';

  for dyn_rec in select * from format($$s%$$,tbl_name) loop
    raise notice 'item is %',dyn_rec.item_no;
  end loop;

  return 'Processing Ok';

end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION check_data()
  OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql

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

PostgreSQL 9.3触发函数插入到具有参数化名称的表中

我正在尝试动态分区Postgres中的日志条目.我有53个子表(每周有1个日志条目),并希望使用触发器将INSERT路由到子表.

我运行该函数INSERT INTO log5 VALUES (NEW.*),它的工作原理.

我用EXECUTE语句运行函数,但它失败了.在EXECUTE语句中,它识别NEW为表名而不是传递给触发器函数的变量.有关如何修复的任何想法?谢谢!

错误:

QUERY:INSERT INTO log5 VALUES(NEW.*)
CONTEXT:PL/pgSQL函数log_roll_test()EXECUTE语句中的第6行
错误:缺少表"new"的FROM子句条目SQL状态:42P01

我的功能:

CREATE FUNCTION log_roll_test() RETURNS trigger AS $body$
DECLARE t text;
BEGIN
    t := 'log' || extract(week FROM NEW.updt_ts); --child table name
    --INSERT INTO log5 VALUES (NEW.*);
    EXECUTE format('INSERT INTO %I VALUES (NEW.*);', t);
    RETURN NULL;
END;
$body$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我的触发器:

CREATE TRIGGER log_roll_test
BEFORE INSERT ON log FOR EACH ROW
EXECUTE PROCEDURE log_roll_test();
Run Code Online (Sandbox Code Playgroud)

postgresql triggers dynamic-sql plpgsql

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

如何在postgresql函数中使用变量进行循环查询

我在postgresql(版本9.4.4)中有一个相当复杂的功能,我需要一些帮助.

我在我的函数中声明了一个循环(下面有大量工作):

CREATE OR REPLACE function getRSI(
    psymbol varchar,
    pstarttime timestamp with time zone,
    pendtime timestamp with time zone,
    pduration double precision,
    ptable varchar
    )
 RETURNS SETOF rsi AS
 $BODY$
 declare
    row_data record;
    -- some variables
 begin
    FOR row_data IN SELECT datetime, value FROM "4" WHERE symbol = 'AAPL' 
    AND datetime BETWEEN '2015-11-23 09:30:00 -0500' AND 
    '2015-11-23 15:59:59-0500' LOOP
       -- enter code here
    END LOOP;
 end
 $BODY$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

这很完美,我可以得到我的功能的结果,并让它为我的所有数字.

我想让循环像这样工作:

FOR row_data in select datetime, value from quote_ident(ptable) 
where …
Run Code Online (Sandbox Code Playgroud)

postgresql for-loop function dynamic-sql plpgsql

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