[英]Issue with SQL variable
请有人帮我理解,为什么当我运行下面的SQL代码时返回“ s”。 但是,当我独自运行SQL部分时,它将返回正确的值“ DaisyRates_May2014”
完整代码:
DECLARE @tablevalue varchar
SET @tablevalue = 'select distinct [BillingReferenceData].[dbo].[Customers].[Tariff]
from [daisybilling].[dbo].[APRW14_FFA68878_Calls]
inner join [BillingReferenceData].[dbo].[Customers] on [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]
where [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]'
Select @tablevalue
SQL本身:
'select distinct [BillingReferenceData].[dbo].[Customers].[Tariff]
from [daisybilling].[dbo].[APRW14_FFA68878_Calls]
inner join [BillingReferenceData].[dbo].[Customers] on [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]
where [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]
谢谢
之所以返回s
是因为您尚未定义变量的长度,因此返回的是sql字符串的第一个字符。 尝试使用varchar(max)
代替varchar
。
但是,那只会返回您的sql语句,而不是运行它。 我认为您想实际运行sql语句,在这种情况下,可以使用exec
或sp_executesql
。
DECLARE @tablevalue varchar(max)
SET @tablevalue = 'select distinct [BillingReferenceData].[dbo].[Customers].[Tariff]
from [daisybilling].[dbo].[APRW14_FFA68878_Calls]
inner join [BillingReferenceData].[dbo].[Customers] on [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]
where [DaisyBilling].[dbo].[APRW14_FFA68878_Calls].[Customer Lookup] = [BillingReferenceData].[dbo].[Customers].[Customer ID]'
exec(@tablevalue)
您指定@tablevalue的类型为长度为1的varchar。 尝试
DECLARE @tablevalue VARCHAR(MAX)
从http://msdn.microsoft.com/en-us/library/ms176089.aspx
当在数据定义或变量声明语句中未指定n时,默认长度为1
要执行到SQL:
EXEC SP_EXECUTESQL(@tablevalue )
要么
EXEC(@tablevalue)
查看http://www.sommarskog.se/dynamic_sql.html,以了解EXEC和AP_EXECUTESQL之间的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.