Sql server SQL在函数中使用时取整varchar
当我遇到以下问题时:Sql server SQL在函数中使用时取整varchar,sql-server,function,Sql Server,Function,当我遇到以下问题时: SELECT top 1 LabResult_Result as Value FROM [TopsData].[dbo].[VIEW_PatientLabResult] where MasterLabCode_ID = '000000003H' and Patient_ID = 'ZZZZZ00063' and LabResult_RecordState = 0 and datediff(d,'11/19/2013',LabResult_DateTimeOfOb
SELECT top 1 LabResult_Result as Value
FROM [TopsData].[dbo].[VIEW_PatientLabResult]
where MasterLabCode_ID = '000000003H'
and Patient_ID = 'ZZZZZ00063'
and LabResult_RecordState = 0
and datediff(d,'11/19/2013',LabResult_DateTimeOfObservation) >= 0
ORDER BY LabResult_DateTimeOfObservation
结果很好,通常是一个类似于十进制的varchar,如1.10
但是,如果我将其包装到函数中,它只返回一个1
:
declare @R varchar(10)
SELECT @R = Value FROM (
SELECT top 1 LabResult_Result as Value
FROM [TopsData].[dbo].[VIEW_PatientLabResult]
where MasterLabCode_ID = '000000003H'
and Patient_ID = 'ZZZZZ00063'
and LabResult_RecordState = 0
and datediff(d,'11/19/2013',LabResult_DateTimeOfObservation) >= 0
ORDER BY LabResult_DateTimeOfObservation
)q
return @R
END
显然,我计划用参数等使其通用化。。但是如果硬编码查询无法返回正确的varchar,我不知道该怎么办。我打赌您的函数会说:
RETURNS VARCHAR
或:
而不是:
RETURNS VARCHAR(10)
或:
完全谴责。。。这两个函数调用都返回a
:
USE tempdb;
GO
CREATE FUNCTION dbo.foo1
(
@a VARCHAR(10)
)
RETURNS VARCHAR
----- LAZY! ---^^^^ Missing length specification!
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo1('abcdefghij');
GO
CREATE FUNCTION dbo.foo2
(
@a VARCHAR
---- LAZY! ^^^^ Missing length specification
)
RETURNS VARCHAR(10)
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo2('abcdefghij');
GO
DROP FUNCTION dbo.foo1, dbo.foo2;
GO
在任何上下文中声明或定义可变宽度类型时,始终指定长度。在某些情况下,SQL Server会假定您的意思是1,在某些情况下是30,在极少数情况下是猜测正确的。更多信息请点击此处:
RETURNS VARCHAR
或:
而不是:
RETURNS VARCHAR(10)
或:
完全谴责。。。这两个函数调用都返回a
:
USE tempdb;
GO
CREATE FUNCTION dbo.foo1
(
@a VARCHAR(10)
)
RETURNS VARCHAR
----- LAZY! ---^^^^ Missing length specification!
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo1('abcdefghij');
GO
CREATE FUNCTION dbo.foo2
(
@a VARCHAR
---- LAZY! ^^^^ Missing length specification
)
RETURNS VARCHAR(10)
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo2('abcdefghij');
GO
DROP FUNCTION dbo.foo1, dbo.foo2;
GO
在任何上下文中声明或定义可变宽度类型时,始终指定长度。在某些情况下,SQL Server会假定您的意思是1,在某些情况下是30,在极少数情况下是猜测正确的。更多信息请点击此处:
RETURNS VARCHAR
或:
而不是:
RETURNS VARCHAR(10)
或:
完全谴责。。。这两个函数调用都返回a
:
USE tempdb;
GO
CREATE FUNCTION dbo.foo1
(
@a VARCHAR(10)
)
RETURNS VARCHAR
----- LAZY! ---^^^^ Missing length specification!
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo1('abcdefghij');
GO
CREATE FUNCTION dbo.foo2
(
@a VARCHAR
---- LAZY! ^^^^ Missing length specification
)
RETURNS VARCHAR(10)
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo2('abcdefghij');
GO
DROP FUNCTION dbo.foo1, dbo.foo2;
GO
在任何上下文中声明或定义可变宽度类型时,始终指定长度。在某些情况下,SQL Server会假定您的意思是1,在某些情况下是30,在极少数情况下是猜测正确的。更多信息请点击此处:
RETURNS VARCHAR
或:
而不是:
RETURNS VARCHAR(10)
或:
完全谴责。。。这两个函数调用都返回a
:
USE tempdb;
GO
CREATE FUNCTION dbo.foo1
(
@a VARCHAR(10)
)
RETURNS VARCHAR
----- LAZY! ---^^^^ Missing length specification!
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo1('abcdefghij');
GO
CREATE FUNCTION dbo.foo2
(
@a VARCHAR
---- LAZY! ^^^^ Missing length specification
)
RETURNS VARCHAR(10)
AS
BEGIN
RETURN @a;
END
GO
SELECT dbo.foo2('abcdefghij');
GO
DROP FUNCTION dbo.foo1, dbo.foo2;
GO
在任何上下文中声明或定义可变宽度类型时,始终指定长度。在某些情况下,SQL Server会假定您的意思是1,在某些情况下是30,在极少数情况下是猜测正确的。更多信息请点击此处: