2014-12-02 36 views
0

我想使用我的表变量“@Customers”的变量,如“@Customers.Name”,我试过它像:Customers.Name或@ Customers.Name,但都显示错误,请建议如何使用变量?如何使用传递给另一个存储过程的表的变量?

CREATE TYPE [dbo].[TableType] AS TABLE(
[CustomerID] [int] NOT NULL, 
[Name] [varchar](255) NULL, 
[City] [varchar](50) NULL, 
[State] [char](2) NULL, 
[Zipcode] [varchar](20) NULL 
) 
GO 

ALTER PROCEDURE sp_GetCustomers 
AS 
BEGIN 
DECLARE @Customers AS TableType 
INSERT INTO @Customers(CustomerID,Name,City,State,ZipCode) 
SELECT C.CustomerID,C.FirstName + ' ' + C.LastName,A.City,A.State,A.ZipCode 
FROM Customers C INNER JOIN CustomerAddress A ON C.CustomerID=A.CustomerID 
EXEC sp_GetCustomersWithAddresses @Customers 

END 
go 

CREATE PROCEDURE sp_GetCustomersWithAddresses 
@Customers TableType READONLY 
AS 
BEGIN 
    SELECT * FROM @Customers where @Customers.Name="XYZ"; 
END 

回答

2

您应该在查询中使用别名。您的存储过程应该如下所示:

CREATE PROCEDURE sp_GetCustomersWithAddresses 
@Customers TableType READONLY 
AS 
BEGIN 
    SELECT * FROM @Customers a where a.Name='XYZ'; 
END 
0

在T-SQL中,您不像使用类的C#语言那样访问表列名称。

但在你的榜样,我认为这是简单:

Select * From @Customers Where [Name] = 'XYZ' 

我在括号中有“姓名”,因为它是在T-SQL的保留字。而T-SQL应该知道[Name]是一个列,因为它知道@Customers是TableType类型。所以这应该工作。

相关问题