我如何查询我的SQL服务器只获取数据库的大小?
我用过这个:
use "MY_DB"
exec sp_spaceused
Run Code Online (Sandbox Code Playgroud)
我懂了 :
database_name database_size unallocated space
My_DB 17899.13 MB 5309.39 MB
Run Code Online (Sandbox Code Playgroud)
它返回了我不需要的几个列,也许有一个从这个存储过程中选择database_size列的技巧?
我也试过这段代码:
SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name,
(size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'
Run Code Online (Sandbox Code Playgroud)
它给了我这个结果:
DatabaseName Logical_Name Physical_Name SizeMB
MY_DB MY_DB D:\MSSQL\Data\MY_DB.mdf 10613
MY_DB MY_DB_log D:\MSSQL\Data\MY_DB.ldf 7286
Run Code Online (Sandbox Code Playgroud)
所以我写了这个:
SELECT SUM(SizeMB)
FROM (
SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name,
(size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'
) AS TEMP …
Run Code Online (Sandbox Code Playgroud) 我有一个问题来决定是使用视图还是临时表.
我有一个存储过程,我从程序调用.在该SP中,我将长查询的结果存储在临时表中,命名列并在该表上进行另一个查询,将结果存储在标签或网格视图或其他内容中,然后删除临时表.我还可以将查询结果存储在视图中并对该视图进行查询.那么什么是更好或者在什么情况下我必须使用VIEW/Temp表.
根据我的研究,视图具有以下优点:安全性,简单性和列名称规范.我的临时表也完成了所有这些(根据我的意见).
我对以下语法有疑问.是否有更简洁的方法将其汇总到一个语句而不是两个语句中.我已经尝试了几次迭代,但这似乎是我成功执行这两个语句的唯一方法.
UPDATE employee
SET hire_date = '1979-03-15'
WHERE emp_id = 'PMA42628M'
UPDATE employee
SET hire_date = '1988-12-22'
where emp_id = 'PSA89086M';
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个,我也尝试使用AND语句.都没有奏效.基本上我正在寻找一种不那么新手的方式然后上面的方法,如果存在的话.我花了很长时间搜索,却找不到一个.
UPDATE employee
SET hire_date = ('1979-03-15', '1988-12-22')
WHERE emp_id = ('PMA42628M', 'PSA89086M');
Run Code Online (Sandbox Code Playgroud)
对这个提出任何建议,顺便说一句,我使用的是sql server.谢谢
我想每天使用唯一名称对我的服务器的所有数据库进行完整的数据库备份.为此我有一个想法,保持时间戳,使数据库副本分开.假设服务器上有一个名为ABCD的数据库,那么它应该被备份为:
ABCD_21_03_2013
ABCD_22_03_2013
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点.我对这些类型的SQL备份JOBS了解不多.
我正在使用一个过程来选择名字和姓氏
declare
@firstName nvarchar(50),
@lastName nvarchar(50),
@text nvarchar(MAX)
SELECT @text = 'First Name : ' + @firstName + ' Second Name : ' + @lastName
Run Code Online (Sandbox Code Playgroud)
该@text
值将被发送到我的邮箱,但名字和姓氏进来单行.我只需要在第二行显示姓氏
O/P 名字:Taylor姓:Swift,
我需要输出如下格式
First Name : Taylor
Last Name : Swift
Run Code Online (Sandbox Code Playgroud) 在我的数据集中,我有一个字段,用于存储用HTML标记的文本.一般格式如下:
<html><head></head><body><p>My text.</p></body></html>
我可以尝试通过执行以下操作来解决问题:
REPLACE(REPLACE(Table.HtmlData, '<html><head></head><body><p>', ''), '</p></body></html>')
Run Code Online (Sandbox Code Playgroud)
但是,这不是一个严格的规则,因为某些条目违反W3C标准并且不包括<head>
标签.更糟糕的是,可能会缺少结束标签.所以我需要REPLACE
为每个可能存在的开始和结束标记包含该函数.
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
Table.HtmlData,
'<html>', ''),
'</html>', ''),
'<head>', ''),
'</head>', ''),
'<body>', ''),
'</body>', ''),
'<p>', ''),
'</p>', '')
Run Code Online (Sandbox Code Playgroud)
我想知道是否有比使用多个嵌套REPLACE
函数更好的方法来实现这一点.不幸的是,我在这种环境中可用的唯一语言是SQL和Visual Basic(不是.NET).
我需要编写一个查询,我可以获取有关所有列的信息(包含数据类型),也可以知道哪些列PK/FK
.因为FK
,需要额外的信息,如其他表.我有查询可行,但看起来有点矫枉过正.
这可以做得更好吗?我不喜欢子查询加入它.它必须是一个查询,不能通过SP
.
我的例子是反对的Northwind
(FK
我正在测试一些额外的关系)
SELECT
t.name AS TableName,
t.object_id AS TableObjectId,
tCols.column_name AS ColumnName,
tCols.data_type AS ColumnDataType,
ISNULL(tCols.numeric_scale, 0) AS ColumnDecimalPlaces,
CASE tConstraints.CONSTRAINT_TYPE
WHEN 'PRIMARY KEY'
THEN '1'
ELSE '0'
END AS ISPK,
CASE tConstraints.CONSTRAINT_TYPE
WHEN 'FOREIGN KEY'
THEN '1'
ELSE '0'
END AS ISFK,
tConstraints.CONSTRAINT_TYPE,
tConstraints.CONSTRAINT_NAME,
fkInfo.FK_name,
fkInfo.PK_column,
fkInfo.PK_table,
fkInfo.PK_name
FROM sys.objects t
LEFT JOIN information_schema.columns tCols ON tCols.TABLE_NAME = t.name
LEFT JOIN (
SELECT
tc.CONSTRAINT_NAME, …
Run Code Online (Sandbox Code Playgroud) 我正在努力SQL Server 2008R2
,我有下表
ID Name date
1 XYZ 2010
2 ABC 2011
3 VBL 2010
Run Code Online (Sandbox Code Playgroud)
现在我想阻止插入,如果我有一个数据虽然ID不同但数据存在
ID Name date
4 ABC 2011
Run Code Online (Sandbox Code Playgroud)
请指导我如何编写此触发器.
我写了商店程序,它应该返回如下的值:
J1
J2
J3
Run Code Online (Sandbox Code Playgroud)
我有桌子命名Journal_Entry
.当表的行数为0时,它会给出结果,J1
但随着行数增加,它会显示错误 -
"Conversion failed when converting the varchar value 'J' to data type int."
Run Code Online (Sandbox Code Playgroud)
#here Voucher_No
是要保存的结果列.
代码如下 -
CREATE PROC [dbo].[getVoucherNo]
AS
BEGIN
DECLARE @Prefix VARCHAR(10)='J'
DECLARE @startFrom INT=1
DECLARE @maxCode VARCHAR(100)
DECLARE @sCode INT
IF((SELECT COUNT(*) FROM dbo.Journal_Entry) > 0)
BEGIN
SELECT @maxCode = CAST(MAX(CAST(SUBSTRING(Voucher_No,LEN(@startFrom)+1,LEN(Voucher_No)- LEN(@Prefix)) AS INT)) AS varchar(100)) FROM dbo.Journal_Entry;
SET @sCode=CAST(@maxCode AS INT)
SELECT @Prefix + LEN(CAST(@maxCode AS VARCHAR(10))+1) + CAST(@maxCode AS VARCHAR(100))
END
ELSE
BEGIN
SELECT(@Prefix …
Run Code Online (Sandbox Code Playgroud) 我在数据库中有一个表.
ID Total Paid Status
1 1000 1000 Paid
2 500 400 Part Paid
3 700 0 Unpaid
4 200 0 Unpaid
Run Code Online (Sandbox Code Playgroud)
现在用户支付PAID_AMT - > $ 900,我想分发这样我的表看起来:
ID Total Paid Status
1 1000 1000 Paid
2 500 500 Paid
3 700 700 Paid
4 200 100 Part Paid
Run Code Online (Sandbox Code Playgroud)
它可以使用游标轻松完成,但我想避免使用游标.
是否可以使用带有Output参数的简单更新查询来实现此目的.
像这样的东西
Update Bill
Set Paid = Total,
Status = 'Paid',
Output PAID_AMT = PAID_AMT - (Total-Paid )
where Total-Paid > PAID_AMT
Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql ×7
t-sql ×4
html ×1
sql-update ×1
sqldatatypes ×1
temp-tables ×1
view ×1
xml ×1