标签: sql-server-2008-r2

如何"测试"修改数据的SQL查询,即在提交sql server 2008之前查看输出?

我使用过其他SQL工具,有些允许我在提交之前查看威胁查询的输出.我喜欢这个两步过程(所以我可以仔细检查一下,我没做坏事).

SQL Server 2008 R2中是否有一种方法可以"执行"查询,查看受影响行的输出,然后选择接受还是丢弃提交?

编辑:

我还发现了另一个问题,使用OUTPUT子句询问相同的答案.

如何预览破坏性SQL查询?

sql-server sql-server-2008-r2

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

为什么执行计划包含用于持久保存的计算列的用户定义函数调用?

我有一个包含2个计算列的表,两个都将"Is Persisted"设置为true.但是,在查询中使用它们时,执行计划会显示用于计算列的UDF作为计划的一部分.由于列数据是由UDF在添加/更新行时计算的,为什么计划会包含它?

当这些列包含在查询中时,查询速度非常慢(> 30s),当排除它们时,查询速度非常快(<1s).这使我得出结论,查询实际上是在运行时计算列值,这不应该是这种情况,因为它们被设置为持久化.

我在这里错过了什么吗?

更新:这里有关于我们使用计算列的推理的更多信息.

我们是一家体育公司,有一个客户将完整的球员名称存储在一个列中.他们要求我们允许他们分别按名字和/或姓氏搜索玩家数据.值得庆幸的是,他们使用一致的播放器名称格式 - LastName,FirstName(NickName) - 因此解析它们相对容易.我创建了一个UDF,调用CLR函数来使用正则表达式解析名称部分.因此,显然调用UDF(后者又调用CLR函数)非常昂贵.但由于它仅用于持久列,我认为它只会在我们将数据导入数据库的一天中使用几次.

performance calculated-columns sql-server-2008-r2 sql-execution-plan

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

TSQL查询查找未使用的存储过程

我试图跟踪数据库中从未使用过的所有存储过程,或者在几个月内未使用过的存储过程.

我想找到一个查询来显示所有未使用的存储过程,以便可以分析这些存储过程以确定是否可以删除它们.

我熟悉sys.procedures,但不知道如何确定某个程序是否正在使用.

SELECT *
FROM sys.procedures;
Run Code Online (Sandbox Code Playgroud)

使用SQL Server 2008 R2.

更新更新更新

使用下面的Aaron Bertrand的查询,略微修改,这是我最终使用的,它是完美的.

SELECT p.*
  FROM sys.procedures AS p
  LEFT JOIN sys.dm_exec_procedure_stats AS s ON s.[object_id] = p.[object_id]
 WHERE s.object_id IS NULL;
Run Code Online (Sandbox Code Playgroud)

谢谢你的hlep.

t-sql sql-server sql-server-2008-r2

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

在巨大的表中更改列类型

我在SQL Server 2008 R2中有一个表,其中有近10亿行.我想将两列的数据类型从int更改为bigint.两次ALTER TABLE zzz ALTER COLUMN yyy有效,但速度很慢.如何加快处理速度?我正在考虑将数据复制到另一个表,删除,创建,复制并切换到简单的恢复模式或以某种方式使用光标一次1000行,但我不确定这些是否真的会导致任何改进.

sql sql-server sql-server-2008 sql-server-2008-r2

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

查找列依赖项

如何查找依赖于表的特定列的对象.

例如:

表:SomeTable

Cols:col1 pk,col2,col3

我想找到所有依赖于col1的对象(Pk)

t-sql sql-server sql-server-2008 sql-server-2008-r2

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

如何在sql中连接两个不相关的表

我有两张桌子:

表1:配方

FormulaId    Formula Text
1            [Qty] * [Rect]
2            [Qty] * [Al]
3            [Mt] * [Cat]  
Run Code Online (Sandbox Code Playgroud)

表2:上下文

ContextId    Name
1            Test 1
2            Test 2
3            Test 3
4            Test 4    
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式在sql server 2008 R2中加入这些表来获取一个表格,其中每个上下文id我将有一个完整的公式列表,即

结果

ContextId    Name     FormulaId    Formula Text    
1            Test 1   1            [Qty] * [Rect]
1            Test 1   2            [Qty] * [Al]
1            Test 1   3            [Mt] * [Cat]
2            Test 2   1            [Qty] * [Rect]
2            Test 2   2            [Qty] * [Al]
2            Test 2 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008 sql-server-2008-r2

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

SQL Server 2008检查索引是否存在

可能重复:
SQL Server DB中所有索引和索引列的列表

我想知道是否有办法根据列名验证特定表的SQL Server数据库中是否存在索引:

假设我运行以下脚本:

  CREATE NONCLUSTERED INDEX [MyIndexName]
  ON [dbo].[MyTable] ([CustomerId])
  INCLUDE ([Id],[ModificationDate],[ProductId])
  GO
Run Code Online (Sandbox Code Playgroud)

现在我想根据表名和列(以及include子句中的列)检查索引是否存在,而不是实际的索引名.

(SQL Server 2008 R2)

谢谢

sql-server sql-server-2008-r2

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

在where子句中运行返回boolean的SQL用户定义函数

希望这似乎不太简单.我已经看了这个,但我不太擅长SQL用户定义的函数及其使用,所以我不确定发生了什么.为了告诉我为什么我收到错误,他们想了几点:

在期望条件的上下文中指定的非布尔类型的表达式,在')'附近.

为了这:

UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')
Run Code Online (Sandbox Code Playgroud)

可以使用以下方法创建函数:

-- ***this will also find NULL and empty string values***
CREATE FUNCTION LMI_IsSingleCharacterRepeated (@string varchar(max), @char char(1))
RETURNS bit
AS 
BEGIN
    DECLARE @index int
    DECLARE @len int
    DECLARE @currentChar char(1)
    SET @index = 1
    SET @len= LEN(@string)

    WHILE @index <= @len
    BEGIN
        SET @currentChar = SUBSTRING(@string, @index, 1)
        IF @currentChar = @char
            SET @index= @index+ 1
        ELSE
            RETURN 0
    END
    RETURN 1
END;
GO
Run Code Online (Sandbox Code Playgroud)

此函数用于检查字符串是否是任何指定的单个字符,重复.希望有人发现它有用!

sql boolean function where-clause sql-server-2008-r2

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

SQL Server存储过程Nullable参数

问题:
当向下面的脚本提供值然后使用C#中的设置执行时,如下面(或在SQL Server环境中),值不会在数据库中更新.

存储过程:

-- Updates the Value of any type of PropertyValue
-- (Type meaining simple Value, UnitValue, or DropDown)
CREATE PROCEDURE [dbo].[usp_UpdatePropertyValue]
    @PropertyValueID int,
    @Value varchar(max) = NULL,
    @UnitValue float = NULL,
    @UnitOfMeasureID int = NULL,
    @DropDownOptionID int = NULL
AS
BEGIN   
    -- If the Property has a @Value, Update it.
    IF @Value IS NOT NULL
    BEGIN
        UPDATE [dbo].[PropertyValue]
        SET
            Value = @Value
        WHERE
            [dbo].[PropertyValue].[ID] = @PropertyValueID
    END
    -- Else check if it has a @UnitValue & …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-server-2008-r2

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

在SQL Server Management Studio 2014中,禁用"新建触发器"菜单选项

在此输入图像描述

我想在我的桌子上添加一个新的触发器.如图所示,"新建触发器"按钮未激活.新索引,新列,新约束,新静态是活跃的.

我不明白是什么问题.

sql-server triggers sql-server-express sql-server-2008-r2 management-studio-express

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