我想使用 WITH 子句创建 VIEW,但真的找不到任何关于正确语法的参考。
我想要这样
WITH TempTbl AS (SELECT ...)
CREATE VIEW SomeView
SELECT *
FROM TempTbl
Run Code Online (Sandbox Code Playgroud)
使用多个 WITH 子句的正确语法是什么?
MSDN 上没有任何用处 :(
我有一个具有以下架构的表,我需要定义一个查询,该查询可以根据时间间隔(例如每分钟记录)对数据进行分组,然后提供自上一组以来对 SnapShotValue 的更改总和。目前,SnapShotValue 总是递增,所以我只需要差异的总和。任何人都可以帮助使用可能执行此操作的 SQL Server T-SQL 查询吗?我愿意更改架构,但这是我目前拥有的。
CaptureTime (datetime)
SnapShotValue (int)
Run Code Online (Sandbox Code Playgroud)
1 Jan 2012 00:00:00, 100
1 Jan 2012 00:00:30, 125
1 Jan 2012 00:01:00, 200
1 Jan 2012 00:01:30, 300
1 Jan 2012 00:02:15, 400
1 Jan 2012 00:02:30, 425
1 Jan 2012 00:02:59, 500
Run Code Online (Sandbox Code Playgroud)
1 Jan 2012 00:01:00, 225 -- Sum of all captured data changes up to the 1 minute mark
1 Jan 2012 00:02:00, 500 -- Sum of all captured …Run Code Online (Sandbox Code Playgroud) 我们的一位客户将DECIMAL(18,0)其 SQL Server 2008R2 数据库中的数据类型用于某些列。由于列增长非常缓慢,他最近提议将数据类型更改为DECIMAL(5,0)以重新获得一些存储空间。
根据MSDN 库,DECIMAL(5,0)数据类型的存储空间与数据类型一样DECIMAL(9,0),为 5 个字节。INT小 1 个字节,但可以存储 -2^31 到 2^31 范围内的所有内容,而不是DECIMAL(5,0)可以存储的 -99,999 到 99,999 。即使是最大的DECIMAL5 个字节 ( DECIMAL(9,0)) 也只能存储 -999,999,999 到 999,999,999 范围内的整数(不到INT4 个字节提供的范围的一半)。
我可以想到使用DECIMALover的两个“好处” INT:
但在我看来,这些并不是真正的好处:
这让我想知道:DECIMAL(5,0)整数数据类型的额外好处是什么?
当您将 Columns 文件夹拖到编辑器窗口时,将添加不带括号的完整列列表。如果您单独拖动列,则它们具有括号。
有没有办法把它关掉?我在选项中找不到任何东西,而且它们真的很让人分心。
我从 Brent Ozar 的网站下载了 SQL Server First Aid Kit。当我以Azure 数据库服务器级别管理员身份登录时,当我尝试通过 Microsoft Sql Server Management Studio 针对我的主数据库运行sp_BlitzIndex脚本时,出现以下错误:
消息 262,级别 14,状态 18,过程 sp_BlitzIndex,第 18 行 CREATE PROCEDURE 权限在数据库“master”中被拒绝。
我在要测试的数据库实例上成功创建了该过程。当我执行该程序时,我收到一条错误消息:
消息 50000,级别 16,状态 1,第 1265 行无效的对象名称“mydatabase.sys.partitions”。
接下来我尝试聪明一点,直接对master数据库运行存储过程代码,而不创建存储过程,得到以下错误:
此版本的 SQL Server 不支持消息 50000,级别 15,状态 1,第 1267 行引用“mydatabase.sys.indexes”中的数据库和/或服务器名称。
我没有足够的信心开始玩弄约 2700 行索引启发式逻辑的内部工作原理。是否有一种快速、简单的方法可以让这个存储过程在 Azure SQL 数据库上很好地工作,或者我应该在别处寻找索引分析工具/存储过程?
t-sql azure-sql-database azure-sql-database-v11 sp-blitzindex
我想知道以下两种方法中哪一种更快:
1) 三COUNT:
SELECT Approved = (SELECT COUNT(*) FROM dbo.Claims d
WHERE d.Status = 'Approved'),
Valid = (SELECT COUNT(*) FROM dbo.Claims d
WHERE d.Status = 'Valid'),
Reject = (SELECT COUNT(*) FROM dbo.Claims d
WHERE d.Status = 'Reject')
Run Code Online (Sandbox Code Playgroud)
2)SUM带 -FROM子句:
SELECT Approved = SUM(CASE WHEN Status = 'Approved' THEN 1 ELSE 0 END),
Valid = SUM(CASE WHEN Status = 'Valid' THEN 1 ELSE 0 END),
Reject = SUM(CASE WHEN Status = 'Reject' THEN 1 ELSE …Run Code Online (Sandbox Code Playgroud) 我有一个包含 42 列的表和一个触发器,当这些列中的 38 列更新时,它应该做一些事情。因此,如果其余 4 列发生更改,我需要跳过逻辑。
我可以使用UPDATE()函数并创建一个大IF条件,但更喜欢做一些更短的事情。使用COLUMNS_UPDATED我可以检查是否所有某些列都更新了?
例如,检查第 3、5 和 9 列是否更新:
IF
(
(SUBSTRING(COLUMNS_UPDATED(),1,1) & 20 = 20)
AND
(SUBSTRING(COLUMNS_UPDATED(),2,1) & 1 = 1)
)
PRINT 'Columns 3, 5 and 9 updated';
Run Code Online (Sandbox Code Playgroud)
因此,20列3和的5值,以及1列的值,9因为它设置在第二个字节的第一位。如果我将语句更改为OR它会检查列3和/5或列9是否更新?
如何OR在一个字节的上下文中应用逻辑?
我在尝试将 SSMS 的上下文动态更改为动态 SQL 中指定的数据库时遇到问题:
EXEC sys.sp_executesql N'USE db1 ' ;
Run Code Online (Sandbox Code Playgroud)
它成功执行,但 SSMS 的数据库上下文不会改变。
我试过对上面的稍作修改
DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50)
SET @db = N'db1' SET @sql = N'Use ' + @db
EXEC sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
同样,它成功执行,但数据库没有改变。
用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。
一个字段(电话号码)由所有数字组成,因此在检查它时会使用 .Net CLR 函数从字符串中去除所有非数字字符。
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Run Code Online (Sandbox Code Playgroud)
问题是,此功能有时会突然停止工作,并出现以下错误:
Msg 6533, Level 16, State 49, Line 2 AppDomain MyDBName.dbo[runtime].1575 被升级策略卸载,以确保 应用程序的一致性。访问关键资源时发生内存不足。 System.Threading.ThreadAbortException:类型异常 'System.Threading.ThreadAbortException' 被抛出。 System.Threading.ThreadAbortException:
我已经尝试了MSDN 上针对此错误发布的建议,但仍然遇到问题。目前,切换到 64 位服务器不是我们的选择。
我知道重新启动服务器会释放它拥有的任何内存,但这在生产环境中不是一个可行的解决方案。
有没有办法仅使用 T-SQL 从 SQL Server 2005 中的字符串中去除非数字字符?
我有一个存储过程 (SS2k8),其中包含一些有时为 null 或为空的表值参数。我已经看到这个StackOverflow 帖子说空/空 TVP 应该简单地从调用参数列表中省略。我的问题是我无法弄清楚如何在存储过程中检查空或空值,因为“IF (@tvp IS NULL)”在过程创建时失败,并显示消息“必须声明标量变量“@tvp””。我是否必须在 TVP 上执行 SELECT COUNT(*) 并检查零?
代码摘录:
CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS
IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
-- lots of expensive processing
END
ELSE
BEGIN
-- a little bit of cheap processing
END
...
Run Code Online (Sandbox Code Playgroud) sql-server-2008 null sql-server t-sql table-valued-parameters
t-sql ×10
sql-server ×7
datatypes ×1
dynamic-sql ×1
null ×1
performance ×1
query ×1
ssms ×1
trigger ×1
view ×1