请有人帮我理解,为什么当我运行下面的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]
由于
答案 0 :(得分:5)
您正在返回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)
答案 1 :(得分:1)
您指定@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之间的差异。