T-SQL存储过程-只选择几列
我有一个从表中选择所有列的存储过程。但我只需要选择其中的几个 如何分配变量以从表中选择几列 现有存储过程代码:T-SQL存储过程-只选择几列,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个从表中选择所有列的存储过程。但我只需要选择其中的几个 如何分配变量以从表中选择几列 现有存储过程代码: DECLARE @DatabaseName NVARCHAR(255) = N’AdventureWorksDW’ DECLARE @SchemaName NVARCHAR(255) = N’dbo’ DECLARE @TableName NVARCHAR(255) = N’DimProduct’ BEGIN SET NOCOUNT ON -- Declare the parame
DECLARE @DatabaseName NVARCHAR(255) = N’AdventureWorksDW’
DECLARE @SchemaName NVARCHAR(255) = N’dbo’
DECLARE @TableName NVARCHAR(255) = N’DimProduct’
BEGIN
SET NOCOUNT ON
-- Declare the parameters internal to query
DECLARE @SQLString NVARCHAR(MAX) = N”
DECLARE @ParamDefinition NVARCHAR(MAX) = N”
DECLARE @ColumnList TABLE (
ColumnId INT IDENTITY(1,1)
, ColumnName NVARCHAR(255)
, ColumnMaxLength INT
, ColumnMinLength INT
)
DECLARE @ColumnMaxLength INT
DECLARE @ColumnMinLength INT
DECLARE @ColumnCount INT = 0
DECLARE @LoopCounter INT = 1
DECLARE @ColumnName NVARCHAR(255)
SET @SQLString =
N’SELECT COLUMN_NAME FROM ‘
@DatabaseName + N’.’ + N’INFORMATION_SCHEMA.COLUMNS
WHERE
DATA_TYPE IN (”CHAR”, ”NCHAR”, ”VARCHAR”, ”NVARCHAR”)
AND TABLE_SCHEMA = @SchemaName
AND TABLE_NAME = @TableName’
SET @ParamDefinition = N’@SchemaName NVARCHAR(255), @TableName NVARCHAR(255)’
INSERT INTO @ColumnList (ColumnName)
EXECUTE sp_executesql @SQLString, @ParamDefinition, @SchemaName, @TableName
SELECT @ColumnCount = COUNT(*) FROM @ColumnList
WHILE (@LoopCounter <= @ColumnCount)
BEGIN
SELECT @ColumnName = ColumnName
FROM @ColumnList
WHERE ColumnId = @LoopCounter
SET @SQLString =
N’SELECT ‘
‘@ColumnMinLength = MIN(LEN(‘ + @ColumnName + ‘))’
‘, @ColumnMaxLength = MAX(LEN(‘ + @ColumnName + ‘))’
‘ FROM ‘
@DatabaseName + N’.’ + @SchemaName + N’.’ + @TableName
‘ WITH (NOLOCK) ‘
SET @ParamDefinition = N’@ColumnMinLength INT OUTPUT, @ColumnMaxLength INT OUTPUT’
EXECUTE sp_executesql @SQLString, @ParamDefinition, @ColumnMinLength OUTPUT, @ColumnMaxLength OUTPUT
UPDATE @ColumnList
SET
ColumnMinLength = @ColumnMinLength
, ColumnMaxLength = @ColumnMaxLength
WHERE ColumnId = @LoopCounter
SET @LoopCounter += 1
END
SELECT
ColumnName AS [Column Name]
, ColumnMinLength AS [Column Minimum Length]
, ColumnMaxLength AS [Column Maximum Length]
FROM @ColumnList
ORDER BY [Column Name]
END
是否可以直接从表中进行选择,而不使用存储过程 如果是这样,您可以使用语法
SELECT Column1, Column2, ColumnN
FROM MyTable
您可以按如下方式创建和执行它
create procedure SELECT_MyTable (
@fieldList nvarchar(max)
)
as
declare @select nvarchar(max)
set @select = 'SELECT ' + @fieldList + ' FROM MyTable'
exec sp_executesql @select
GO
declare @fieldList nvarchar(max) = 'UserName,region'
exec SELECT_MyTable @fieldList
变量不选择列。如果需要更改过程中的列,则需要修改过程。您尝试了什么?也许如果您演示了一点过程,这将更容易回答。下面是我正在编写的脚本。请准备好在3。。。2.1.是的,我意识到不能对列名使用参数。只要确保@fieldList是在内部生成的,而不是从任何用户输入生成的,就可以了。