我有一个代码是:
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个打印语句.
那么有没有办法可以根据脚本的长度设置打印语句的数量?
我有一个很长的存储过程,当我执行该过程时,我收到以下错误:
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) 我有一个名为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)
任何人都可以告诉我为什么我得到'
'它,我怎么能纠正它?
我有大约100个表,其中所有表都有重复的外键约束.
有没有办法可以摆脱它?是否有查询可以为我提供所有重复的密钥?
我在表中有大约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但不知道如何删除
我试图以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)
它给了我正确的输出,但有一个简单的方法吗?
我有一个名为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)
谁能帮我?
当你提供当前日期时,我正试图获得本季度的哪一天.
例如,如果我给出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)
谁能帮我?
我有一个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)