Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用传递给另一个存储过程的表的变量?_Sql Server_Tsql - Fatal编程技术网

Sql server 如何使用传递给另一个存储过程的表的变量?

Sql server 如何使用传递给另一个存储过程的表的变量?,sql-server,tsql,Sql Server,Tsql,我想使用我的表变量“@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,

我想使用我的表变量“@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

在T-SQL中,您不会以这种方式访问表列名,就像在C#之类的语言中使用类一样

但在你的例子中,我认为它很简单:

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

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

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

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