小编ber*_*d_k的帖子

是否有用于 SQL-Server 的工具来帮助添加分号?

早期版本的 SQL-Server 不推荐使用分号来终止 sql 语句。

从 sql-server-2008 示例开始,现在 Microsoft 建议以分号结尾。

有一些格式化工具可以格式化 sql 查询并添加分号。我认为基本功能在 SMO 的某个地方。

唯一的问题是这些工具会删除所有注释。

任何想法如何保留所有评论以及如何添加所有推荐分号?

sql-server-2008 syntax

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

构建动态 SQL-Server Where 子句

让我们回顾一下SQL-Server 的dba.exchange Oracle 问题

这是 SaUce 的代码,经过一些格式化:

CREATE PROCEDURE GetCustomer 
    @FirstN nvarchar(20) = NULL, 
    @LastN nvarchar(20) = NULL, 
    @CUserName nvarchar(10) = NULL, 
    @CID nvarchar(15) = NULL 
as
begin 
    DECLARE @sql nvarchar(4000)

    SELECT @sql = 'C_FirstName, C_LastName, C_UserName, C_UserID 
FROM CUSTOMER
WHERE 1=1 '

    IF @FirstN IS NOT NULL 
        SELECT @sql = @sql + ' AND C_FirstName like @FirstN ' 

    IF @LastN IS NOT NULL 
        SELECT @sql = @sql + ' AND C_LastName like @LastN ' 

    IF @CUserName IS …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-injection

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

如何在 SQL Server 中将日期和时间与日期时间相结合?

我刚刚找到了以下代码:

CREATE FUNCTION dbo.JoinDateAndTime
(
    @d datetime,
    @t datetime
)
RETURNS Datetime
as
    BEGIN
        declare @res datetime
        set @res = convert (datetime, Convert(varchar(10), @d, 104) + ' ' + convert(varchar(8), @t, 108), 104)
        return @res
    END
go
Run Code Online (Sandbox Code Playgroud)

在看到如何在没有时间部分的情况下获取当前日期的答案后,我确信涉及到 varchar 的转换不是最好的解决方案。

顺便说一句,我搜索了这个问题,但只找到了 mySql 的解决方案。

sql-server

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

在触发器中,我可以确定列是否显式设置为值或未在更新语句中提及?

给定一个列 col1 的表,如下所示:

create table MyTest (
    col1 int NULL,
    col2 decimal(7, 2) NULL
);

insert into MyTest values ( 1, 1.1);
Run Code Online (Sandbox Code Playgroud)

有没有办法让更新触发器决定执行以下哪个更新语句?

A:

update MyTest set col1 = 3;
Run Code Online (Sandbox Code Playgroud)

乙:

update MyTest set col1 = 3, col2 = 1.1;
Run Code Online (Sandbox Code Playgroud)

trigger sql-server

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

我可以从纯 T-SQL 调用 SMO 吗?

我知道如何使用 PowerShell 和 SMO 编写存储过程脚本:

[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo")  | out-null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" 
$srv.databases['MyDatabase'].StoredProcedures['MyProc'].TextBody
Run Code Online (Sandbox Code Playgroud)

但由于我想在查询中使用过程文本,我想知道是否可以在纯 T-SQL 中以某种方式调用 SMO。

只能在开发环境中运行。

顺便说一句:返回具有给定名称的存储过程定义的函数可以解决我当前的问题,但不能回答我的问题。

编辑:

当我使用这个查询时,我想找到哪些过程引用了给定的表:

SELECT p.name --, definition 
FROM sys.sql_modules m
join sys.objects p on m.object_id = p.object_id
where p.type = 'P'
and definition like '%SearchForThis%'
Run Code Online (Sandbox Code Playgroud)

这与我想使用 SMO 获得的信息完全相同。

sql-server-2008 stored-procedures scripting sql-clr ole-automation

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

保证 SQL Server Identity Columns 两个连续的值以恒定增量不同?

我提出关于迪纳利序列的问题,在这里和关于Oracle全球表标识列的仿真另外一个问题在这里

我一直认为我可以相信身份值会不断增加。另一方面,我知道使用序列我永远无法确定它们中没有一些空白。

是时候适应序列中的差距,还是留在临时表中的标识列会更好?

sql-server sequence identity sql-server-2012 temporary-tables

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

ALTER INDEX REBUILD 使用哪个填充因子?

的TechNet给我的感觉,我要么必须明确地设置想要的填充因子或当我不指定它,默认的填充因子0 choosen。

对于我知道添加行的表,填充因子 0 不是一个好的选择。有没有办法重建索引,以便使用最后一个显式索引?

BTW:我认为这应该是默认设置。

index sql-server-2005 sql-server-2008

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

为什么在存储过程中使用 sp_addextendedproperty 时需要回滚?

此处输入链接描述中,我展示了我如何记录数据库。

为了插入扩展属性,最初我使用 sp_addextendedproperty 调用的计划序列。

但是最近,当我在旧版本的数据库上运行脚本时,我想捕获有关不存在对象的错误。

我通过反复试验找到了以下工作代码

begin try 
drop procedure dbo.BK_add_Tableproperty
end try begin catch end catch

go
create procedure dbo.BK_add_Tableproperty (
    @table_name sysname,
    @property_name nvarchar(max),
    @Property_value sysname
)
as  
    declare @error integer;
begin try
    EXEC sys.sp_addextendedproperty @name= @property_name,
    @value = @Property_value, 
    @level0type=N'SCHEMA',
    @level0name=N'dbo', 
    @level1type=N'TABLE',
    @level1name=@table_name
end try begin catch
    SET @error = @@ERROR;
    if @error = 15135
        Print 'Table missing no extended properties added: ' + @table_name
    else if @error = 15233
        Print 'Table has already property: …
Run Code Online (Sandbox Code Playgroud)

sql-server transaction

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

使用 DTA 还是评估 DMV?

目前,我遇到了一个生产 SQL Server 数据库,其中有人添加了几乎所有来自 DTA 的缺失索引建议。

表单如何确定索引是必需的还是必要的我已经了解到,存在 DMV 视图,可用于延迟有关实际索引使用情况以及缺失索引的信息。

Jason Srate的脚本仅使用该视图中的当前信息,而当天的乐趣 - 自动自动索引!将这些视图中的一些信息保存到表中。

另一方面,DTA 需要规划何时运行分析器、选择要分析的内容并对运行时的性能产生一些影响。

我的印象是,使用 DTA 作为第一步调优工具只是浪费时间,因为它的结果没有涵盖完整的数据库使用情况,新手很难理解,并且可能导致添加过多的索引,从而对写入性能产生负面影响,而通过 DMV 收集数据几乎不需要准备,几乎涵盖了自上次重启以来数据库的全部使用情况。

我的问题侧重于向管理层提出哪种策略。我想在第一步中专注于评估 DMV 视图,而完全忽略 DTA。

performance sql-server-2008 sql-server index-tuning database-tuning-advisor

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

缺少 SQLCMD 的相对路径功能有哪些解决方法:r?

我不是第一个注意到缺少此功能的人

但我想知道是否有一些有用的解决方法。我想在同一个文件夹中部署一个主脚本和一些依赖脚本。

顺便说一句,Microsoft Connect 上有票吗?

编辑:

锁定于此,似乎等同于在 sqlcmd 模式下运行的脚本是否可以确定其在文件系统中的路径的问题。

第二次编辑:

SO我找到了一种将脚本路径传递到 sqlcmd 的方法

sqlcmd -S myServer -d myDB -U user -P password -i file1.sql -v p1="D:\myscripts" 
Run Code Online (Sandbox Code Playgroud)

我可以验证它是否传递给 File1.sql

PRINT '$(p1)' 

:setvar path1 $(p1) + '\file1.sql'

:r $(path1)
Run Code Online (Sandbox Code Playgroud)

但是我没有找到在第二行中连接路径和文件名的正确方法。

第三次编辑: 我在这里找到了连接路径和文件名的解决方案。

PRINT '$(p1)' 

:r $(p1)\file1.sql
Run Code Online (Sandbox Code Playgroud)

还有更好的方法吗?

sql-server sqlcmd

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