小编Dev*_*art的帖子

选择SQL Server数据库大小

我如何查询我的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)

sql sql-server sql-server-2008 sql-server-2008-r2

139
推荐指数
5
解决办法
47万
查看次数

用什么?查看或临时表

我有一个问题来决定是使用视图还是临时表.

我有一个存储过程,我从程序调用.在该SP中,我将长查询的结果存储在临时表中,命名列并在该表上进行另一个查询,将结果存储在标签或网格视图或其他内容中,然后删除临时表.我还可以将查询结果存储在视图中并对该视图进行查询.那么什么是更好或者在什么情况下我必须使用VIEW/Temp表.

根据我的研究,视图具有以下优点:安全性,简单性和列名称规范.我的临时表也完成了所有这些(根据我的意见).

sql sql-server view temp-tables

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

更新语句以更新多行

我对以下语法有疑问.是否有更简洁的方法将其汇总到一个语句而不是两个语句中.我已经尝试了几次迭代,但这似乎是我成功执行这两个语句的唯一方法.

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.谢谢

sql-server sql-update

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

如何在sql server中创建具有唯一名称的每日备份

我想每天使用唯一名称对我的服务器的所有数据库进行完整的数据库备份.为此我有一个想法,保持时间戳,使数据库副本分开.假设服务器上有一个名为ABCD的数据库,那么它应该被备份为:

ABCD_21_03_2013
ABCD_22_03_2013
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点.我对这些类型的SQL备份JOBS了解不多.

sql-server sql-server-2008 sql-server-2008-r2

13
推荐指数
2
解决办法
4万
查看次数

sql server中的新行

我正在使用一个过程来选择名字和姓氏

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)

sql t-sql sql-server

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

SQL - 删除字符串中的所有HTML标记

在我的数据集中,我有一个字段,用于存储用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).

html xml sql t-sql sql-server

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

SQL Query获取misc列信息

我需要编写一个查询,我可以获取有关所有列的信息(包含数据类型),也可以知道哪些列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 t-sql sql-server

11
推荐指数
2
解决办法
400
查看次数

触发以防止插入两列的重复数据

我正在努力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)

请指导我如何编写此触发器.

sql sql-server sql-server-2008

10
推荐指数
1
解决办法
4万
查看次数

将varchar值转换为sql中的数据类型int时转换失败

我写了商店程序,它应该返回如下的值:

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)

t-sql sql-server sqldatatypes

7
推荐指数
2
解决办法
12万
查看次数

无光标更新值

我在数据库中有一个表.

法案

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 sql-server azure-sql-database

7
推荐指数
1
解决办法
122
查看次数