繁体   English   中英

SQL变量问题

[英]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语句,在这种情况下,可以使用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)

您指定@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM