Jua*_*uez 7 sql t-sql sql-server dynamic-sql
我在这里尝试做的是创建一个动态查询,其中 DBA 只需要在变量级别更改列名,原因是因为我们有多个被可怕地创建的数据库,即使它们具有相同的数据,列名从一个变为另一个(它们之间没有规范化)。
我正在处理一个大约有 400 行的查询,我试图避免的是将逻辑传递给另一个 DBA,在那里他们必须通过脚本并替换所有列名......而只是分配列名从他们的数据库到逻辑匹配。不确定这是否可能。
这是一个例子:
Declare @ColumnA
Declare @ColumnB
set @ColumnA = 'UserID'
set @ColumnB = 'Salary'
select @ColumnA,@ColumnB from Table
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这种功能?
您可以像这样使用动态 SQL:
DECLARE @ColumnA nvarchar(max),
@ColumnB nvarchar(max),
@table nvarchar(max)
@sql nvarchar(max)
SELECT @ColumnA = N'UserID',
@ColumnB = N'Salary',
@table = N'Table'
SELECT @sql = N'SELECT ' +QUOTENAME(@ColumnA)+','+QUOTENAME(@ColumnB)+ ' FROM '+QUOTENAME(@table) +';'
EXEC sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用 QUOTENAME 是一个很好的做法,它可以避免注入或列名中出现空格。
QUOTENAME- 返回一个 Unicode 字符串,其中添加了分隔符以使输入字符串成为有效的 SQL Server 分隔标识符。返回nvarchar(258)。于是就UserID成了[UserID]。
| 归档时间: |
|
| 查看次数: |
15781 次 |
| 最近记录: |