标签: sql-server-2008-r2

为什么我们主要不使用SQL_VARIANT数据类型,即使它支持所有类型的数据?

SQL_VARIANT数据类型可用于同时存储各种数据类型的值,例如数值,字符串和日期值.(唯一不能存储的值类型是TIMESTAMP值.)那么在表中避免这种数据类型的具体原因是什么?

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

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

如何根据SQL Server中的数据长度对列进行排序

众所周知,一般排序是使用order by.我想要执行的那种不同.我希望表格n中间的最小长度值是其顶部和底部的最大长度值.一半应该是下降,另一半应该是上升.你们能帮忙吗?这是一个面试问题.

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

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

在几何数据类型中插入一个圆

我现在第一次开始使用几何或地理数据类型,因为我们有一个2008R2的开发基线(!)我正在努力找到如何存储圆的表示.我们目前有圆的中心和长度的纬度,类似于: -

[Lat] [float] NOT NULL,
[Long] [float] NOT NULL,
[Radius] [decimal](9, 4) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

有没有人知道使用STGeomFromText方法存储它的等效方法,即使用哪个Well-Known Text(WKT)表示?我看过圆形字符串(LINESTRING)和曲线,但找不到任何例子....

谢谢.

t-sql geometry geospatial sql-server-2008-r2 computational-geometry

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

SQL Server 2008 R2中的日期格式

如何在SQL Server 2008 R2中为以下格式转换日期:

日期:

'29-01-2008 AM 12:00:00'
Run Code Online (Sandbox Code Playgroud)

我有上面的日期来检查表的当前日期.

如何从上述格式中仅查看日期?

sql sql-server sql-server-2008-r2

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

REPLACE不在sql表列上工作

我已经尝试了选择REPLACE(' this is a user name', ' ', ''),它给了我'thisisausername'这应该是.

我的问题是,当我尝试使用REPLACE选择表列时,它不起作用!

我的查询:

SELECT REPLACE(UserName, ' ', '') as UserName FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)

它仍然给我带有空格的用户名!我做了些蠢事吗?

sql sql-server sql-server-2008-r2

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

需要在SQL Server 2008中打印所有缺少值的列名称

我需要在单个字符串中缺少必需值的所有列名,在下面显示的select语句中.

我已经尝试过使用CASE语句,但它没有工作,因为如果第一个匹配,它将省略第二个条件.

SELECT
    stg2.StageID
    ,[CSP]
    ,[CSPRegionID]
    ,[SoldToCompanyID]
    ,[EndUserCompanyID]
    ,[SupportOptionID]
    ,'One/More Mandatory value/s is/are missing' FailureReason
    ,CASE   WHEN stg2.CSP IS NULL THEN @FailureDetails + 'CSP' 
            WHEN stg2.CSPRegionID IS NULL THEN @FailureDetails + 'CSP Region' 
            WHEN stg2.SoldToCompanyID IS NULL THEN @FailureDetails + 'SoldToCompany' 
            WHEN stg2.EndUserCompanyID IS NULL THEN @FailureDetails + 'EndUserCompany' 
            WHEN stg2.SupportOptionID IS NULL THEN @FailureDetails + 'SupportOption' 
    END FailureDetails
FROM [EntitlementTracker_SRV4Stage].[dbo].[srv4_ClassicLoad_Stage2] stg2
WHERE stg2.CSP IS NULL
OR stg2.CSPRegionID IS NULL
OR stg2.SoldToCompanyID IS NULL
OR stg2.EndUserCompanyID IS NULL 
OR stg2.SupportOptionID …
Run Code Online (Sandbox Code Playgroud)

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

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

将值转换为日期时间

我有一个包含数据的大型CSV文件,如下所示(我已对其进行了简化):

Timestamp,      Value 1, Value 2

41883.00000000, 123.4,   223.4

41883.00011574, 567.8,   667.8
Run Code Online (Sandbox Code Playgroud)

我想使用SQL Server导入和导出向导将数据导入MSSQL 2008 R2。为此,我需要将我的时间戳列转换为日期时间,这会将时间戳更改为:

Timestamp ->> Timestamp (converted)

41883.00000000 ->>  2014-09-01 00:00:00

41883.00011574 ->>  2014-09-01 00:00:10
Run Code Online (Sandbox Code Playgroud)

谁能帮助我进行转换的语法?

sql-server datetime sql-server-2008-r2

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

提取大写字母和数字

我正在尝试处理一个字符串,以便只采用大写字母和数字.试图使用PATINDEX,因为我想保持这种简洁 - 它将成为更大的查询的一部分.

有很多例子显示出类似的东西,但我似乎错过了一些东西.到目前为止我已经有了

DECLARE @string varchar(100)

SET @string = 'AbcDef12-Ghi'

WHILE PATINDEX('%[^A-Z0-9]%',@string) <> 0
    SET @string = STUFF(@string,PATINDEX('%[^A-Z0-9]%',@string),1,'')

SELECT @string
Run Code Online (Sandbox Code Playgroud)

根据例如这个问题,然而这似乎并没有做我需要的.

使用[^0-9]输出12,这是正确的.

[^A-Z]输出AbcDefGhi,即大写和小写.如果我使用[^A-Z]或者[^a-z]都返回所有字母都没关系.

我想我可能会遗漏一些简单的东西?我发现了一些建议,指整理并试图用逐份PATINDEX按照这个,但不能让它开始工作.

注意:我这样做是作为SQL Server数据库上的一次性查询来查找一些数据 - 这不会在其他任何地方重复使用,所以像性能,SQL注入(在这种情况下经常提到)等不是关心.

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

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

SQL Server:多列的唯一值的总和

使用SQL Server,我有一个表,如下面的示例表所示.我需要为"BookOrder,StationaryOrder和Printing Order"列提供所有唯一值的总和.

样本表:

KeyIDCustomer   BooksOrder  StationaryOrder PrintingOrder
29945843         1070756    1891514            198876
29945843         1070756    1893827            198876
29945843         1070758    1891514            198876
29945843         1070758    1893827            198876
Run Code Online (Sandbox Code Playgroud)

我正在使用以下编码来实现这一目标.

Select DISTINCT KeyIDCustomerID,
Sum(Case when BooksOrder is not null then 1 else 0 End) TotalBookOrders,  
Sum(Case when StationaryOrder is not null then 1 else 0 End) TotalStationaryOrder,
Sum(Case when PrintingOrder is not null then 1 else 0 End)TotalPrintingOrder
Run Code Online (Sandbox Code Playgroud)

通过这种编码,我得到的结果如下

  KeyIDCustomerID   TotalBookOrders TotalStationaryOrder    TotalPrintingOrder
   29945843                    4                       4                    4
Run Code Online (Sandbox Code Playgroud)

我希望结果是这样的

  KeyIDCustomerID   TotalBookOrders TotalStationaryOrder    TotalPrintingOrder
   29945843                    2                       2 …
Run Code Online (Sandbox Code Playgroud)

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

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

存储过程 - 将数据类型varchar转换为数字时出错

运行一个简单的存储过程时,我收到此错误,坦率地说,我不知道为什么.

消息8114,级别16,状态5,过程PROC_TEST,行15
错误将数据类型varchar转换为数字.

列:

  • SI_IDNUMERIC(19,0)
  • SI_COMPANYIDNUMERIC(19,0)
  • SI_LOGINIDVARCHAR(100)

知道为什么吗?

这是存储过程:

CREATE PROCEDURE [xxxxxx].[PROC_TEST] 
AS
BEGIN    
    SET NOCOUNT ON

    DECLARE
          @id NUMERIC(19,0),
          @login VARCHAR(100);

    DECLARE user_cursor CURSOR       <<----- Line 15
    FOR
       SELECT 
           SI_ID, SI_LOGINID 
       FROM SI_USER 
       WHERE SI_COMPANYID = 123

    OPEN user_cursor

    FETCH NEXT FROM user_cursor into @id, @login

    WHILE @@FETCH_STATUS = 0 
    BEGIN
          PRINT @id + ', ' + @login

          FETCH NEXT FROM user_cursor into @id, @login
    END

    CLOSE user_cursor
    DEALLOCATE user_cursor
END
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures sql-server-2008-r2

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