SQL变量问题

时间:2014-05-27 15:51:57

标签: sql sql-server variables

请有人帮我理解,为什么当我运行下面的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]

由于

2 个答案:

答案 0 :(得分:5)

您正在返回s,因为您要返回sql字符串的第一个字符,因为您还没有定义变量的长度。尝试使用varchar(max)代替varchar

但是,这只会返回你的sql语句,而不是运行它。我想你想实际运行你的sql语句,在这种情况下,你可以使用execsp_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之间的差异。