SQL变量问题

use*_*480 -1 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
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

谢谢

sge*_*des 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)
Run Code Online (Sandbox Code Playgroud)