1
5
唯一的方法是像第一个例子那样列出所有列。没有像这样的语法
但是,出于SQL注入和计划缓存的原因,应该使用参数化SQL。 |
2
5
我自己也有同样的问题,我想用一种简单的方法来解决这个问题。 我找到了解决办法 here 这就允许了。我稍微修改了一下,删除了输出id,并使IdColumnName的默认值为'id'。 IF OBJECT_ID('TableRowCopy') IS NOT NULL DROP PROCEDURE TableRowCopy GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[TableRowCopy]( @TableName VARCHAR(50), @WhereIdValue INT, @IdColumnName VARCHAR(50) = 'Id' ) AS BEGIN DECLARE @columns VARCHAR(5000), @query VARCHAR(8000); SET @query = '' ; SELECT @columns = CASE WHEN @columns IS NULL THEN column_name ELSE @columns + ',' + column_name END FROM INFORMATION_SCHEMA.COLUMNS WHERE ( TABLE_NAME = LTRIM(RTRIM(@TableName)) AND column_name != LTRIM(RTRIM(@IdColumnName)) ); SET @query = 'INSERT INTO ' + @TableName + ' (' + @columns + ') SELECT ' + @columns + ' FROM ' + @TableName + ' WHERE ' + @IdColumnName + ' = ' + CAST(@WhereIdValue AS VARCHAR); EXEC (@query); SELECT SCOPE_IDENTITY(); END 示例用法:
|
Jack Skeletron · T-SQL三表求和 6 年前 |
CSK · 列出sql server中存储过程中的存储过程 6 年前 |
DRT · 从文本字段中提取多个日期 6 年前 |
ihatemash · 确定可以合并哪些行的SQL查询 6 年前 |
Shawn · 使用WinZip命令行的SQL Server作业 6 年前 |