今天在办公室提出了这个问题.我没有计划做这样的事情,但理论上你可以在SQL中编写一个编译器吗?乍一看,在我看来,虽然对于许多类型的问题非常麻烦,但我觉得它是完整的.
如果它没有完成,那么它需要什么呢?
注意:我不想做任何事情,比如在SQL中编写编译器,我知道这样做会很愚蠢,所以如果我们能够避免讨论,我会很感激.
我想Employees在数据库中更改表的模式名称.在当前表Employees数据库模式名称是dbo我想要更改为exe.我该怎么做 ?
例:
从
dbo.Employees
Run Code Online (Sandbox Code Playgroud)
至
exe.Employees
Run Code Online (Sandbox Code Playgroud)
我试过这个查询:
ALTER SCHEMA exe TRANSFER dbo.Employees
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误:
无法更改架构'exe',因为它不存在或您没有权限.
我错过了什么?
我需要在表A上编写一个Insert,Update Trigger,它将删除表B中的所有行,其中一列(比如Desc)的值类似于表A列中插入/更新的值(比如Col1).我将如何编写它以便我可以处理Update和Insert案例.如何确定是否为更新或插入执行了触发器.
我听说你应该在索引声明的开头放置最具选择性的列.例:
CREATE NONCLUSTERED INDEX MyINDX on Table1
(
MostSelective,
SecondMost,
Least
)
Run Code Online (Sandbox Code Playgroud)
首先,我说的是正确的吗?如果是这样,我可能会通过重新排列索引中列的顺序来看到性能上的巨大差异,还是更像是"很好做"的做法?
我问的原因是因为在通过DTA进行查询后,它建议我创建一个索引,其中几乎所有列都与现有索引相同,只是顺序不同.我正在考虑将缺少的列添加到现有索引并调用它.思考?
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
Run Code Online (Sandbox Code Playgroud)
我明白了
"无效的列名称daysdiff".
Maxlogtm是一个日期时间字段.这是让我疯狂的小东西.
我有一个用户定义的表类型.我想在使用OBJECT_ID(name, type)函数编辑补丁之前检查它是否存在.
什么type从枚举应传递用户定义的表类型?
N'U' 喜欢用户定义的表不起作用,即 IF OBJECT_ID(N'MyType', N'U') IS NOT NULL
我有一个案例,使用JOIN或IN将给我正确的结果......通常有更好的性能,为什么?它取决于您运行的数据库服务器多少钱?(仅供参考我使用的是MSSQL)
我正在尝试执行此查询:
declare @tablename varchar(50)
set @tablename = 'test'
select * from @tablename
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
Msg 1087,Level 16,State 1,Line 5
必须声明表变量"@tablename".
什么是动态填充表名的正确方法?
我一直在使用这一段时间:
SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col))
Run Code Online (Sandbox Code Playgroud)
但是最近,我发现所有"0"字符的列都有问题,例如'00000000',因为它永远找不到匹配的非"0"字符.
我见过的另一种技术是使用TRIM:
REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0')
Run Code Online (Sandbox Code Playgroud)
如果存在嵌入空格,则会出现问题,因为当空格变回"0"时,它们将变为"0".
我试图避免使用标量UDF.我在SQL Server 2005中发现了很多UDF的性能问题.
t-sql ×10
sql ×9
sql-server ×8
date ×1
indexing ×1
performance ×1
schema ×1
string ×1
tablename ×1
triggers ×1