标签: exec

EXEC 与 SP_EXECUTESQL 性能

最近我们对我们的数据库使用了一个 sql 代码审查工具。建议使用SP_EXECUTESQL代替EXEC.

我知道SP_EXECUTESQL可以帮助我们避免 sql 注入。使用EXECvs时性能有什么不同吗SP_EXECUTESQL

performance sql-server dynamic-sql t-sql exec query-performance

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

从链接服务器获取@@SERVERNAME

这似乎是一个基本问题,但我找不到任何答案 - 我需要能够从链接服务器获取服务器名称/实例等。我尝试了几件事:

select <linked server>.@@SERVERNAME;
select <linked server>.SERVERPROPERTY('ServerName');
Run Code Online (Sandbox Code Playgroud)

......但没有快乐。有任何想法吗?

这是SQL 2008 R2& 2014(2008R2是链接服务器)

编辑:错误是:

消息 102,级别 15,状态 1,第 2 行“@@SERVERNAME”附近的语法不正确。

sql-server sql-server-2008-r2 linked-server openrowset exec

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

插入表 Exec SP 性能不佳

我正在开发一个数据仓库。我们每晚刷新的一个临时表有大约 1000 万行。我们正在使用自定义构建的 ETL 工具,我无法对其进行太多更改。该工具像这样加载这个临时表:

truncate stage_table;
insert into stage_table with (tablockx) (column1, column2, etc...)
exec load_stage_table @batch_id = @batch_input
Run Code Online (Sandbox Code Playgroud)

的内容load_stage_table有一些设置和选择语句。我无法分享确切的代码,但这是一个基本示例。

create table load_stage_table
(
     @batch_id varchar(max) = null
)
as 

-- <update batch_id in batch_table>

-- collect data

select
    column1 = table1.column1,
    column2 = table2.column2,
    ...
from table1
join table2
    on table2.id = table1.table2_id
-- many more similar joins
Run Code Online (Sandbox Code Playgroud)

问题是,当我按照 ETL 工具运行的方式运行存储过程时,运行时间几乎是 30 分钟。但是,如果我修改存储过程以在内部包含插入语句,则只需 1 分钟。

    create table load_stage_table
(
     @batch_id varchar(max) = null
)
as 

-- …
Run Code Online (Sandbox Code Playgroud)

performance sql-server insert sql-server-2016 exec query-performance

5
推荐指数
1
解决办法
1593
查看次数

exec 限制为 4000 个字符?

尝试执行此脚本仅给出第一个选择结果

declare @sp nvarchar(max)
select @sp = concat(N'select 1 ', replicate('-', 5000), char(13) + char(10), N'select 2')
exec (@sp)
Run Code Online (Sandbox Code Playgroud)

但是当我将连字符降低到 1000 时,我还得到了第二个选择 如何克服这个限制?

sql-server dynamic-sql exec

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