小编pet*_*ter的帖子

如何使用Print Statement打印VARCHAR(MAX)?

我有一个代码是:

DECLARE @Script VARCHAR(MAX)

SELECT @Script = definition FROM manged.sys.all_sql_modules sq
where sq.object_id = (SELECT object_id from managed.sys.objects 
Where type = 'P' and Name = 'usp_gen_data')

Declare @Pos int

SELECT  @pos=CHARINDEX(CHAR(13)+CHAR(10),@script,7500)

PRINT SUBSTRING(@Script,1,@Pos)

PRINT SUBSTRING(@script,@pos,8000)
Run Code Online (Sandbox Code Playgroud)

脚本的长度大约是10,000个字符,因为我使用的print语句最多只能容纳8000个.所以我使用了两个打印语句.

问题是,当我有一个脚本,比如18000个字符,然后我习惯使用3个打印语句.

那么有没有办法可以根据脚本的长度设置打印语句的数量?

sql t-sql sql-server sql-server-2005 sql-server-2008

94
推荐指数
10
解决办法
8万
查看次数

操作数类型冲突

我有一个很长的存储过程,当我执行该过程时,我收到以下错误:

Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
Run Code Online (Sandbox Code Playgroud)

因此,为了解决问题,我已经打印了问题所在的问题,代码是:

SELECT  'Name' ,
                7 ,
                CASE WHEN 'varchar' = 'varbinary'
                     THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr([Name])), 'X', 'x')
                     ELSE CONVERT(VARCHAR(4000), [Name])
                END , 'varchar'
        FROM    ref.dbo.datatables
        WHERE   id = 12
        ORDER BY [ID]
Run Code Online (Sandbox Code Playgroud)

所以当我执行上面的语句时,它会将错误视为:

Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
Run Code Online (Sandbox Code Playgroud)

Name的数据类型是ref.dbo.datatables表中的Varchar(MAX)

如何解决这个问题?

回答:

这就是我的工作:

SELECT 'Name',
        7,
        CASE WHEN 'varchar' = 'varbinary'
        THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr(CONVERT(VARBINARY,[Name]))),'X','x')
        ELSE CONVERT(VARCHAR(4000),[Name]) …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server varbinary sql-server-2008

11
推荐指数
1
解决办法
5万
查看次数

使用XML PATH时的额外字符

我有一个名为Map_Data的表,数据如下:

 ID    SoCol                                                              Descol  
 125   case Per_rating when 5 then 'Good' when 4 then 'Ok' else null end  D_Code
Run Code Online (Sandbox Code Playgroud)

我在这个特定的行上写了一个查询,查询是:

SELECT  Params = ( SELECT   DesCol + ' = ''' + SoCol + ''''
                   FROM     dbo.Map_Data  t1
                   WHERE   ID = 125
                   FOR
                   XML PATH('')
                 )
Run Code Online (Sandbox Code Playgroud)

我得到的输出为:

D_Code = 'case per_rating
 when 5 then 'Good'
 when 4
 then 'Ok'
 end'
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么我得到'
'它,我怎么能纠正它?

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

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

删除重复的外键

我有大约100个表,其中所有表都有重复的外键约束.

有没有办法可以摆脱它?是否有查询可以为我提供所有重复的密钥?

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

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

删除完全重复

我在表中有大约2000个精确重复项,我想删除其中一个有一种方法:示例数据如下所示:

Year    ID   Name   Type
2015    200  John   S
2015    200  John   S 
2014    100  Peter  T
2014    100  Peter  T
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

Year    ID   Name   Type
2015    200  John   S
2014    100  Peter  T
Run Code Online (Sandbox Code Playgroud)

我尝试过使用Row_number但不知道如何删除

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

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

从getdate()中提取日期格式

我试图以YYYYMMDDHHMM格式获取getdate.

我写了这样一个查询:

SELECT CAST(CONVERT(VARCHAR, GETDATE(), 112) AS VARCHAR)+CONVERT(VARCHAR,DATEPART(hh,GETDATE())) 
+CONVERT(VARCHAR,DATEPART(minute,GETDATE())) 
Run Code Online (Sandbox Code Playgroud)

它给了我正确的输出,但有一个简单的方法吗?

t-sql sql-server datetime sql-server-2008

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

Varchar对Sum运算符无效

我有一个名为Cos的表,Amt的数据类型是Float,示例数据如下所示:

Acct  Period  F_year   Amt
Detf  1       2011     Null
Detf  2       2011     Null
Detf  3       2011     1669.57
FTE   1       2011     3205.11
FTE   2       2011     0
FTE   3       2011     Null
Run Code Online (Sandbox Code Playgroud)

我写了一个像这样的查询:

Select Acct,Period,F_year, Sum(AMT) as Amt
from dbo.Cos
Group By Acct,Period,F_year
Where Amt is not null
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Msg 8117, Level 16, State 1, Line 1
Operand data type varchar is invalid for sum operator.
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

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

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

获得季度的天数

当你提供当前日期时,我正试图获得本季度的哪一天.

例如,如果我给出01/25/2012,那么输出应为25.因为它是本季度的第25天.

同样,如果我给02/01/2012它应该给出32作为输出.

我能够在本季度的第一天获得,但无法获得该季度的哪一天.

我做了这样的事情:

 SELECT FirstDayOfQuarter  = CONVERT(DATE, dateadd(qq, datediff(qq,0, GETDATE()),0))
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

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

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

将dd-mm-yyyy转换为mm/dd/yyyy

我有一个varchar(200)名为的列Submit_Date,我试图将其转换为MM/DD/YYYY格式.当我这样做时,我收到以下错误:

消息242,级别16,状态3,行1
将varchar数据类型转换为日期时间数据类型导致超出范围的值.

该表的样本数据是:

Submit_Date
-----------------------
27-09-2013 16:15:00 CST
30-09-2013 16:30:24 CST
27-09-2013 10:03:46 CST
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

Select Convert(datetime,Submit_date,101) from dbo.Tickets
Run Code Online (Sandbox Code Playgroud)

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

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