我有许多与此结构类似的存储过程:
DECLARE @sql NVARCHAR(MAX)
DECLARE @mdx NVARCHAR(MAX)
CREATE table #result
(
[col1] NVARCHAR(50),
[col2] INT,
[col3] INT
)
SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'
INSERT INTO #result
EXEC sp_executesql @sql
SELECT * FROM #result
Run Code Online (Sandbox Code Playgroud)
当多维数据集中存在结果时,这非常有效。但是,当 OpenQuery 结果为空时,INSERT 会失败并显示以下错误:
列名或提供的值数量与表定义不匹配。
我的问题是,处理这种情况的最佳方法是什么?我在静态报告文件 (.rdlc) 中使用结果,因此(我很确定)需要显式键入临时表。
此查询运行,但它会生成表的名称,而不是从该表中实际选择.
SELECT T.*
FROM (SELECT tablename
FROM ListOfTables
WHERE id = 0) AS T
Run Code Online (Sandbox Code Playgroud)
在ListOfTables包含的地方id=0, tablename='some_table',我想返回相同的结果集,就好像我直接写了一样:
SELECT * FROM some_table
Run Code Online (Sandbox Code Playgroud)
在MySQL 5中是否有以本机方式执行此操作,或者我是否必须在应用程序中执行此操作?
给定以下架构:
create table account_type_a (
id SERIAL UNIQUE PRIMARY KEY,
some_column VARCHAR
);
create table account_type_b (
id SERIAL UNIQUE PRIMARY KEY,
some_other_column VARCHAR
);
create view account_type_a view AS select * from account_type_a;
create view account_type_b view AS select * from account_type_b;
Run Code Online (Sandbox Code Playgroud)
我尝试在plpgsql中创建一个通用的触发器函数,它可以更新视图:
create trigger trUpdate instead of UPDATE on account_view_type_a
for each row execute procedure updateAccount();
create trigger trUpdate instead of UPDATE on account_view_type_a
for each row execute procedure updateAccount();
Run Code Online (Sandbox Code Playgroud)
我的不成功的努力是:
create function updateAccount() returns trigger …Run Code Online (Sandbox Code Playgroud) 假设我在SQL Server 2008 R2中有以下数据库
db1, db2, db3, db4, db5......dbn
Run Code Online (Sandbox Code Playgroud)
每个数据库都有一个A包含列的表C1,C2,C3
我可以Select在两个数据库上编写以下语句来获取它们之间的数据:
Select C1,C2,C3
FROM db1.dbo.A
UNION ALL
Select C1,C2,C3
FROM db2.dbo.A
Run Code Online (Sandbox Code Playgroud)
但是,如果我在同一台服务器上有50个数据库,我不想UNION ALL为每个服务器编写一个数据库.
有人可以给我一个脚本来做这个吗?我可以修改脚本以自己排除系统数据库.
谢谢
获取错误列名称"@ColumnNames"无效.在最后一行(插入子句),任何想法为什么?
Declare @ColumnNames varchar(2000)
Declare @OrderId int
set @OrderId = 110077
select @ColumnNames = COALESCE(@ColumnNames + ', ', '') + COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
TABLE_NAME='OrderItems'
Insert into dbo.OrderHistory(@ColumnNames) select * from dbo.[Order] where ID= @OrderId
Run Code Online (Sandbox Code Playgroud) 示例我有一个名为A- 的表Z,但只有
table "A" and table "J"
Run Code Online (Sandbox Code Playgroud)
有一个
column clm varchar(10).
Run Code Online (Sandbox Code Playgroud)
但后来我意识到我需要clm达到 50 码(鉴于我不知道这一点A并且J有一列clm)。
PG 中是否有可以做这件事的脚本/查询?
我想为 PG SQL 数据库中的模式创建一个更新函数。下面是一个测试功能。它不起作用,因为它永远不应该发出通知,但在运行时会这样做test_schema_update('second')。
CREATE OR REPLACE FUNCTION test_schema_update(my_schema_name VARCHAR(200))
RETURNS void AS
$__marker__$
DECLARE
actualValue varchar(1000);
testValue varchar(1000);
BEGIN
EXECUTE 'SET search_path TO ' || quote_ident(my_schema_name);
testValue := (SELECT max(value) FROM setting WHERE settingkey = 'libraryname');
EXECUTE ('SELECT max(value) FROM setting WHERE settingkey = ''libraryname''')
INTO actualValue;
IF (actualValue != testValue)
THEN
RAISE NOTICE '% != %', actualValue, testValue;
RAISE INFO 'Schema was: %', current_schema();
END IF;
RESET search_path;
END;
$__marker__$ LANGUAGE plpgsql;
test_schema_update('first');
test_schema_update('second');
Run Code Online (Sandbox Code Playgroud)
问题是 PG …
我正在研究一个需要非常自动化的Oracle过程,所以我使用的是动态SQL.我是新手使用动态SQL.
我正在使用varchar2变量来构建需要执行的SQL.我已经使用dbms_output来捕获正在生成的SQL,并且执行正常:
sql创建Basket Swap table = CREATE TABLE INBOUND.BASKET_CTAS_SWP COMPRESS FOR QUERY HIGH as SELECT*FROM INBOUND.BASKET_FCT PARTITION(SYS_1234);
但是,当我使用它执行该过程时,它会生成以下错误
Execute MyProcedure;
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何指导!
oracle版本:Oracle Database 11g企业版版本11.2.0.3.0 - 64位生产
IDE:Oracle SQL Developer版本4.0.2.15 Build 15.21
码:
note: all variables set at beginning of procedure...
Sqlexec:= 'CREATE TABLE ' || Basket_Swap_Schema || '.' || Basket_Swap_Table_Name || ' ';
Sqlexec:= Sqlexec || 'COMPRESS FOR QUERY HIGH ';
Sqlexec:= Sqlexec || 'AS SELECT * FROM ' || Basket_Source_Schema_Name || '.' || Basket_Source_Table_Name || ' ';
Sqlexec:= Sqlexec …Run Code Online (Sandbox Code Playgroud) 在SQL Server 2014中,我试图创建一个动态WHERE子句.
我已经将查询构建为字符串,但是当我尝试使用sp_executesql执行它时,我收到以下错误: Líne13您必须声明标量变量"@desde".
我无法弄清楚如何让sp_executesql识别输入参数.
ALTER PROCEDURE [dbo].[seleccionarFacturas]
-- Add the parameters for the stored procedure here
@desde char(8) = null,
@hasta char(8) = null,
@minimo int = null,
@ciudad int = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @tiendas varchar(max);
DECLARE @tablaFacturas TABLE
(
fecha char(8),
CO char(8),
consecutivo varchar(max),
nombreCliente varchar(max),
ventaTotal int
);
SET @tiendas='(ID_CO=20 OR ID_CO=22 OR ID_CO=23 OR …Run Code Online (Sandbox Code Playgroud) 我有一个表(名为 VGI_table),其中包含一个列(名为 match_tabl),其中包含同一数据库中其他表的名称以及这些表的 object_ids。我正在尝试创建一个 plpgsql 函数,该函数遍历 VGI_table 中的每一行并执行查询以从另一个表中检索对象,如下所示。
该函数有 4 个参数(都是 varchar),前两个是 VGI_table 中的列名,第三个是 VGI_table 的名称,最后一个参数是输出。
vgi_match_id_col, vgi_match_table_col, vgi_table, output_table
Run Code Online (Sandbox Code Playgroud)
该函数的代码如下所示,ro 用于保存第一个表查询,match_row 保存查询的外部表的输出。距离是使用 PostGIS st_distance 函数创建的输出。
DECLARE
ro record;
match_row record;
distance float;
BEGIN
for ro in EXECUTE 'select gid, geom, '||vgi_match_id_col||' as match_id, '||vgi_match_table_col||' as match_table from '||vgi_table
LOOP
--raise notice '(%)', 'select geom from public.'||ro.match_table||' where gid = '||ro.match_id;
execute 'select geom from public.'||ro.match_table||' where gid = '||ro.match_id into match_row;
distance := st_distance(ro.geom, st_transform(match_row.geom,st_srid(ro.geom)));
EXECUTE 'INSERT INTO '||output_table||' …Run Code Online (Sandbox Code Playgroud) dynamic-sql ×10
sql ×6
postgresql ×4
plpgsql ×3
t-sql ×3
sql-server ×2
ddl ×1
execute ×1
mysql ×1
mysql5 ×1
openquery ×1
oracle ×1
plsql ×1
postgis ×1
search-path ×1
ssas ×1
triggers ×1
types ×1