我正在编写一个动态 sql 以在不同的数据库中删除和创建视图。
所以我写道:
set @CreateViewStatement =
'
USE ['+ @DB +'];
CREATE VIEW [dbo].[MyTable]
AS
SELECT ........something
exec (@CreateViewStatement)
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
'CREATE VIEW' 必须是查询批处理中的第一条语句。
如果我删除 USE DATABASE 语句,它可以正常工作,但是不再指定数据库....
我怎么解决这个问题?
我发现的只是一个DateFormat
我可以选择的预定义列表,就像这样
我记得在 MySQL(还有 PostgeSQL?)你可以定义你的日期格式:
DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc.
Run Code Online (Sandbox Code Playgroud)
SQL Server 有同样的东西吗?我看到人们必须编写一个函数来做这样的事情,它有内置的吗?
编辑:
我刚刚找到了这个DatePart
功能。它可以以月份为数字,但总是返回 1 位数字,即使我使用 datePart(MM, getdate())
我正在阅读这里的答案(来自stackoverflow,我认为应该在这里提问)
NOLOCK 意味着根本不放置锁。
您的查询可能会在单个查询中返回 UPDATE 之前的部分数据和 UPDATE 之后的部分数据。
我知道 nolock 不会锁定表,所以其他人可以同时查询。
从它显示的答案和示例来看,它在数据更新时获取数据。
为什么会这样?
我假设对于普通选择,它会尝试在表上加锁,因此当执行更新语句时,它会在行或页上加锁。然后当我尝试运行 select 语句时,它无法放置锁,直到更新语句锁被释放。
但是在这种情况下因为select语句不会尝试给表加锁,所以它可以运行而无需等待update语句释放锁?