我想制作 table 的变量 我可以在 Microsoft sql 服务器管理工作室上制作它吗?
I want to make a vairable of table can i make it on Microsoft sql server management studio?
我想在存储过程中创建一个 table 的变量来调用来自 3 个不同 table 的数据,例如
我在文本框中有城市名称和一个下拉列表,其中的值是 tablenames,
我已经做了一个存储过程:
[dbo].[sp_Search]
@City nvarchar(50) = null
AS
SELECT * FROM PropertyForSale_TBL WHERE (City = @City OR @City IS NULL)
这里是仅用于文本框的 SP,不用于下拉列表。
我想要一个将 table 名称作为变量的过程,因此当我 select 下拉列表时,它会调用 table 中的数据。
就像我想象的那样它的作品可能......
[dbo].[sp_Search]
@City nvarchar(50) = null,
@Tablename Table (maybe or maybe not i dont know it is not working)
AS
SELECT * FROM @Tablename WHERE (City = @City OR @City IS NULL)
我该怎么做?????
您可以构建动态 SQL 并执行它
这是一个简单的例子(注意有多种方法可以执行动态 SQL 并且每种方法都有自己的优点和缺点,做一点研究)
DECLARE @City NVARCHAR(50) = 'New York'
, @TableName VARCHAR(100) = 'PropertyForSale_TBL'
DECLARE @SQL NVARCHAR(MAX) =
'SELECT * FROM ' + QUOTENAME(@Tablename) + ' WHERE [City] = ''' + @City + ''''
PRINT @SQL -- SELECT * FROM [PropertyForSale_TBL] WHERE [City] = 'New York'
EXEC (@SQL)
编辑:另外,仅注释动态代码通常不是最好的主意。以上内容使您自己面临 SQL 注射和其他令人头疼的问题。查看您的数据库结构,看看数据是否可以放在相同的表、IF 语句和使用的临时表或多个存储过程中。
您需要构建动态查询,因为 table 名称不能是变量。对于这种情况,您可以使用 sp_executesql
到 运行 动态查询,如下所示。
您可以使用 sp_executesql
使其参数化查询以避免任何 SQL 注入威胁。
create procedure [dbo].[sp_search]
@City nvarchar(50) = null,
@Tablename varchar(100)
as
begin
declare @sql nvarchar(max)
set @sql = N'SELECT * FROM ' + quotename(@Tablename)
+ ' WHERE (City = @City OR @City IS NULL)'
exec sp_executesql
@sql,
N'@City nvarchar(50)',
@City
end
我想在存储过程中创建一个 table 的变量来调用来自 3 个不同 table 的数据,例如
我在文本框中有城市名称和一个下拉列表,其中的值是 tablenames,
我已经做了一个存储过程:
[dbo].[sp_Search]
@City nvarchar(50) = null
AS
SELECT * FROM PropertyForSale_TBL WHERE (City = @City OR @City IS NULL)
这里是仅用于文本框的 SP,不用于下拉列表。
我想要一个将 table 名称作为变量的过程,因此当我 select 下拉列表时,它会调用 table 中的数据。 就像我想象的那样它的作品可能......
[dbo].[sp_Search]
@City nvarchar(50) = null,
@Tablename Table (maybe or maybe not i dont know it is not working)
AS
SELECT * FROM @Tablename WHERE (City = @City OR @City IS NULL)
我该怎么做?????
您可以构建动态 SQL 并执行它
这是一个简单的例子(注意有多种方法可以执行动态 SQL 并且每种方法都有自己的优点和缺点,做一点研究)
DECLARE @City NVARCHAR(50) = 'New York'
, @TableName VARCHAR(100) = 'PropertyForSale_TBL'
DECLARE @SQL NVARCHAR(MAX) =
'SELECT * FROM ' + QUOTENAME(@Tablename) + ' WHERE [City] = ''' + @City + ''''
PRINT @SQL -- SELECT * FROM [PropertyForSale_TBL] WHERE [City] = 'New York'
EXEC (@SQL)
编辑:另外,仅注释动态代码通常不是最好的主意。以上内容使您自己面临 SQL 注射和其他令人头疼的问题。查看您的数据库结构,看看数据是否可以放在相同的表、IF 语句和使用的临时表或多个存储过程中。
您需要构建动态查询,因为 table 名称不能是变量。对于这种情况,您可以使用 sp_executesql
到 运行 动态查询,如下所示。
您可以使用 sp_executesql
使其参数化查询以避免任何 SQL 注入威胁。
create procedure [dbo].[sp_search]
@City nvarchar(50) = null,
@Tablename varchar(100)
as
begin
declare @sql nvarchar(max)
set @sql = N'SELECT * FROM ' + quotename(@Tablename)
+ ' WHERE (City = @City OR @City IS NULL)'
exec sp_executesql
@sql,
N'@City nvarchar(50)',
@City
end