标签: t-sql

在函数中无效使用副作用运算符“INSERT” - 在函数中多次插入

如果这不是正确的论坛,请让我知道并为我移动它。

我刚刚在标量函数的末尾有一堆这样的插入:

   INSERT INTO [Raptor].[dbo].[UserRole]
           ([RoleId]
           ,[UserId])
     VALUES
           (3
           ,@NewUserID)

    INSERT INTO [Raptor].[dbo].[UserRole]
               ([RoleId]
               ,[UserId])
         VALUES
               (5
               ,@NewUserID)
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql functions

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

哪个更适合长期数据库可扩展性:添加列或具有键/值存储

对于目前只有很少(5-10)个设置但将来会有更多(最多100个)设置的应用程序,这将是更好的方法:

  1. 每次引入新设置时向设置表添加新列
  2. 将设置表作为键/值存储

考虑到应用程序可能有数百万个实例(它们都在同一个数据库上运行并使用同一个表进行设置),数据库可能被分片。DB 是关系型的,即 MySQL 或 T-SQL。

作为开发人员,我更喜欢第二个变体,因此我可以在不更改数据库架构的情况下扩展应用程序并随意添加/删除设置。据我了解,如果索引聚集在应用程序实例上,那么在单个表中拥有几百万条记录应该不是问题。有什么我不知道的缺点吗?

那么第一个变体呢?有什么大的好处吗?那么列数呢:表可以包含的列数是否有任何理论限制?如果我有一个包含 1000 (10 000, 1000 000) 列的表会发生什么?那会不会很慢?

mysql database-design t-sql scalability eav

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

左连接和左外连接的区别

在 SQL Server 连接语法中,我们可以使用LEFT JOINorLEFT OUTER JOIN和查询结果,上面的每个连接都没有区别。这对我来说是一个更有用的问题。

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

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

T-SQL:将 XML 转换为没有自闭合标签的字符串

我们有一个奇怪的系统,我们正在与之集成,它使用 XML,但它理解自闭合标签,所以

<BOOKING>
  <BOOKINGID>56812</BOOKINGID>
  <PERSONCODE />
</BOOKING>
Run Code Online (Sandbox Code Playgroud)

超出了它的能力。

如果我拥有的是declare @x xml,我如何将其转换@x为字符串而没有自关闭标签:

<BOOKING>
  <BOOKINGID>56812</BOOKINGID>
  <PERSONCODE></PERSONCODE>
</BOOKING>
Run Code Online (Sandbox Code Playgroud)

xml sql-server t-sql

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

以编程方式查找无法在线重建的索引

我正在使用 T-SQL 自动重建和重新组织索引。我遇到了无法在线重建的索引问题。发生这种情况主要是因为包含 ntext/nvarchar 列。

有没有办法以编程方式将它们标识为该语句的一部分?对 WHERE 谓词的补充

SELECT 
--TOP 20
OBJECT_NAME(IPS.OBJECT_ID) AS [TableName], avg_fragmentation_in_percent, SI.name         [IndexName],  
schema_name(ST.schema_id) AS [SchemaName], 0 AS IsProcessed 
INTO #FramentedTableList 
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL , NULL) IPS 
JOIN sys.tables ST WITH (nolock) ON IPS.OBJECT_ID = ST.OBJECT_ID 
JOIN sys.indexes SI WITH (nolock) ON IPS.OBJECT_ID = SI.OBJECT_ID AND IPS.index_id =   SI.index_id 
WHERE ST.is_ms_shipped = 0 AND SI.name IS NOT NULL 
AND avg_fragmentation_in_percent >= CONVERT(DECIMAL,   @FragmentationThresholdForReorganizeTableLowerLimit) 
ORDER BY avg_fragmentation_in_percent DESC 
Run Code Online (Sandbox Code Playgroud)

index sql-server t-sql

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

表值函数中的条件 WHERE 子句

我有一个表值函数

    CREATE FUNCTION [dbo].[DateRange] 
    (
        @StartDate date,
        @EndDate date,
        @Location varchar(25),
        @Device varchar(25)
    ) 
    RETURNS TABLE 
    AS
    RETURN 
    (
        SELECT *
        FROM MyTable
        WHERE Date < @EndDate AND
              Date > @StartDate AND
              Location = @Location AND
              Device = @Device 

    );
Run Code Online (Sandbox Code Playgroud)

现在我想让用户选择使用 NULL 作为位置参数和/或设备参数,以便他/她获取与位置和设备无关的所有数据

什么是最优雅和最有效的方式来做到这一点?

t-sql sql-server-2012

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

使用日期优化 where 子句

我正在尝试优化几个在其中一个WHERE子句上都使用类似模式的查询:

AND (DATEADD(DAY
            , ISNULL(a.[due_days], 30) + 30
            , [dbo].[CalcDate]([type], date1, date2, date3, date4, NULL))
            ) < GETDATE()
Run Code Online (Sandbox Code Playgroud)

CalcDate基于type字段值的udf进行一些比较并返回一个日期。然后将天数添加到该日期并与当前日期进行比较。为了能够使用现有的索引,due_days我想转换操作以将所有转换应用到GETDATE(),假设我想sargable在可能的情况下实现它。另外,如果有一些关于可以做些什么来更好地改进 udf 的使用的建议。

optimization t-sql sql-server-2008-r2

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

日期时间列与日期 + 时间列

我正在为一个保存大量日志的系统设计一个表。我们正在查看每秒大约 200 个条目。

我们使用的是 SQL-Server 2012 企业版。

我有一个关于将一Datetime列分成两列的问题,Date并且Time.

我在问题背后的想法。我会说一旦数据存储在数据库中,大多数搜索将基于每天,给我今天/1 月 10 日的所有结果。

现在我仍然需要存储时间。因此,如果我将其存储为datetime,则在执行此查询时,sql 将不得不加载整个datetime字段,然后只查看一半的数据。

因此,通过可能将日期存储在其自己的字段中,它可以只查看它需要的内容。

但另一方面,如果您确实在查询中指定了时间,则它现在必须检查两列的值。

因此,我希望 SQL Gurus 提供关于哪个选项对大型数据库的查询具有更好的性能的输入。

据我所知datetime,可以高度优化并且是比分解更好的解决方案。

sql-server t-sql sql-server-2012 datetime date

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

拆分一副牌,并像洗牌一样返回结果

假设我有一张桌子,上面有一副牌,编号为 01-52。我可以返回顶部和底部的卡片,就好像我通过执行以下操作将联合选择查询的每一侧握在我的左手和右手上:

select top 26 * from DeckOfCards order by CardNumber desc
union all
select top 26 * from DeckOfCards order by CardNumber asc
Run Code Online (Sandbox Code Playgroud)

这将是平分秋色。

但是我怎么能让 SQL Server 将返回的结果交织在一起,就好像我已经拿走了那个联合的两个部分,一个在我的左手,另一个在我的右手,然后像一副纸牌一样洗牌一次?

IE:CardNumber 52,后跟 1,顺序如下:52, 1, 51, 2, 50, 3, 49, 4, etc...

这不是一个家庭作业问题,只是当我试图闭上眼睛时脑海中闪过的那些事情之一。:)

sql-server t-sql

5
推荐指数
2
解决办法
664
查看次数

何时使用与重新编译

我知道重新编译是什么意思,我知道由于性能问题,没有 dmv 等,大多数时候不建议使用它。

有时在某些情况下它可能有所帮助,但OPTION(RECOMPILE)也可能有所帮助。

那么,什么时候最好使用With Recompileover OPTION(RECOMPILE)?

谢谢。

sql-server stored-procedures t-sql

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